JSP簡介
JSP全名爲Java Server Pages,中文名叫java服務器頁面,其根本是一個簡化的Servlet設計,它是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準。
JSP技術有點類似ASP技術,它是在傳統的網頁HTML(標準通用標記語言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件,後綴名爲(*.jsp)。 用JSP開發的Web應用是跨平臺的,既能在Linux下運行,也能在其他操作系統上運行。
JSP基本結構
- 一個JSP頁面由5種元素組成而成。
- 普通的HTML標記。
- JSP標記,如指令標記、動作標記。
- 變量和方法的聲明。
- Java表達式。
- Java表達式。
JSP的執行過程
JSP的運行原理
(1) 把JSP頁面中的HTML標記(頁面的靜態部分)發送給用戶的瀏覽器,由瀏覽器中的HTML解釋器負責解釋執行HTML標記。
(2) 負責處理JSP標記,並將有關的處理借結果發送到用戶的瀏覽器。
(3) 執行”<%“和”%>”之間的Java程序片(頁面中的動態部分),並把執行結果交給用戶的瀏覽器顯示。
(4) 當多個用戶請求一個JSP頁面時,Tomcat服務器爲每個用戶啓動一個線程,該線程負責執行常駐內存的字節碼文件來響應相應用戶的請求。
七大元素
1.HTML文本元素
html 是超文本標記語言。html裏的一切元素都適用。
2.指令
page指令
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
page指令用來定義整個JSP頁面的一些屬性和這些屬性的值。page指令標記可以指定如下屬性的值。
language | 該屬性值目前只能取 java,且屬性的默認值也是 java。 |
---|---|
import | 爲JSP頁面引入Java核心類庫。 |
屬性名 | 屬性值 |
contentType | 確定JSP頁面響應的MIME類型和JSP頁面字符的編碼。 |
session | 設置是否需要使用內置對象。 |
buffer | 指定out的緩衝區的大小或者不適用緩衝區。 |
auotFlush | 指定out的緩衝區被填滿是,是否自動刷新。 |
isThreadSaf | 設置JSP頁面是否可以多線程訪問。 |
info | 爲JSP頁面準備一個可能需要經常使用的字符串。 |
include指令
如果需要在JSP頁面的某處整體插入一個文件,就可以考慮使用這個指令標記。該指令標記的形式如下。
<%@ include file="文件的URL" %>
taglib指令
申明該JSP文件使用了自定義的標籤。
<%@taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
1、uri屬性:用來指定標籤庫的存放位置。
2、prefix屬性:指定該標籤庫必須使用的前綴。
3.註釋
1.HTML註釋
<!-- 註釋的內容 -->
2.JSP頁面註釋
<%-- 註釋的內容 --%>
4.表達式
可以在<%= %>之間插入的內容
<%=x+y %> 注意:<%和=之間不要有空格。
5.Java程序片
可以在<% %>之間插入的內容。
<table border="1" id="tab">
<%
for (int i = 0; i < 10; i++) {
%>
<tr>
<%
for (int j = 0; j < 10; j++) {
String color = Integer.toHexString(random.nextInt(8888));
%>
<td bgcolor="#<%=color%>"><%=++count%></td>
<%
}
%>
</tr>
<%
}
%>
</table>
6.屬性和方法的聲明
可以在<%! 和 %>之間插入的語句
<%!
int count = 0;
private Random random = new Random();
public int getFontSize(){
return random.nextInt(80);
}
public String getColor(){
return Integer.toHexString(random.nextInt(8888));
}
%>
7.動作標記元素
<jsp:param name="屬性名字" value="屬性的值"/>
九大內置對象
對象名稱 | |
---|---|
out | |
response | |
request | |
pageContext | |
session | |
application | |
config | |
page | |
exception |
request常用方法
- request.getParameter(String s) 獲取用戶提交的信息。
<p>姓名:<%= request.getParameter("username")%></p>
- request.getParameterValues(“hobby”) 獲取用戶提交的複選框信息。
<p>愛好:<%=Arrays.toString(request.getParameterValues("hobby")) %></p>
- request.setCharacterEncoding(String s) 使用request的方法之前,一定要設置編碼。
request.setCharacterEncoding("utf-8");
- request.getHeader(String s) 獲取HTTP協議定義的頭文件信息。
request.getHeader("Host") //127.0.0.1:8080
- request.getHeaderNames() 獲取頭名字的一個枚舉
request.getHeaderNames()
<%
Enumeration<String> e = request.getHeaderNames();
while (e.hasMoreElements()) {
String headname = e.nextElement();
Object value = request.getHeader(headname);
out.println(headname + "=" + value + "<br>");
}
%>
可以獲取到信息如下:
accept=image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
referer=http://localhost:8080/jsp1/register.jsp
accept-language=zh-CN
content-type=application/x-www-form-urlencoded
ua-cpu=AMD64
accept-encoding=gzip, deflate
user-agent=Mozilla/5.0 (Windows NT 6.2; Win64; x64; Trident/7.0; rv:11.0) like Gecko
host=localhost:8080
content-length=122
connection=Keep-Alive
cache-control=no-cache
cookie=JSESSIONID=DEFC9244E4FA4E2618E58A5591ED50E5; Webstorm-f7b670b3=f4532459-88f1-4a59-a617-5ee0df0d2035
- request.getServerName() 獲取服務器的名字
request.getServerName() //127.0.0.1
- request.getRemoteHost() 獲取用戶機的名稱
request.getRemoteHost() //127.0.0.1
- request.getServerPort() 獲取服務器的端口號
request.getServerPort() //8080
request.getParameterNames() 獲取用戶提交的所有參數的名字
request.getParameterNames()
<%
Enumeration messages = request.getParameterNames();
while (messages.hasMoreElements()) {
String s = (String)messages.nextElement();
out.println(s);
}
%>
獲取的信息如下
username password states hobby prop self
request.getRemoteAddr() 獲取用戶的IP地址
IP:<%=request.getRemoteAddr() %> //0:0:0:0:0:0:0:1
Tomcat目錄
bin目錄
bin目錄主要是用來存放tomcat的命令,主要有兩大類,一類是以.sh結尾的(linux命令),另一類是以.bat結尾的(windows命令)。
很多環境變量的設置都在此處,
例如可以設置JDK路徑、tomcat路徑
startup 用來啓動tomcat
shutdown 用來關閉tomcat
修改catalina可以設置tomcat的內存
conf目錄
conf目錄主要是用來存放tomcat的一些配置文件。
server.xml可以設置端口號、設置域名或IP、默認加載的項目、請求編碼 。
web.xml可以設置tomcat支持的文件類型。
context.xml可以用來配置數據源之類的 。
tomcat-users.xml用來配置管理tomcat的用戶與權限 。
在Catalina目錄下可以設置默認加載的項目 。
lib目錄
lib目錄主要用來存放tomcat運行需要加載的jar包。
logs目錄
顧名思義,這是存放日誌文件的目錄。
temp目錄
temp目錄用戶存放tomcat在運行過程中產生的臨時文件。
webapps目錄
webapps目錄用來存放應用程序,當tomcat啓動時會去加載webapps目錄下的應用程序。
work目錄
work目錄用來存放運行時的編譯後文件。 清空work目錄,然後重啓tomcat,可以達到清除緩存的作用。
指令包含和動作包含的區別
1.指令語法不同
<%@ include file="文件的URL"%>
<%@ jsp: include page="文件的URL"%>
2.處理方式不同
inlude指令標記是在編譯階段就處理所需要的文件,被處理的文件在邏輯和語法上依賴當前JSP頁面;而inlcude動作標記是在JSP頁面運行時才處理文件,被處理的文件在邏輯和語法上獨立於當前JSP頁面,可以更加靈活地是使用param子標記處理所需要的文件。
3.處理時間不同
include指令標記執行速度快;而include動作標記執行速度相對來說要慢一些。
Post和Get提交數據的區別
1.get:地址欄傳參 post:不是在地址欄傳參,隱式請求體方式
2.get不安全,post安全
3.get:傳參字符長度有限制(大概255)。post沒有限制
4.get:作爲郵件傳輸或收藏 post不可以
表單提交
form 屬性列表
action=“reg.jsp” 表單提交的url
target="_blank" 表單提交的目標tab
method=“get” 表單提交的方式get| post
enctype=“multipart/form-data” 表單數據的編碼方式
get:只能傳輸文本、長度有限制、數據明文(不安全),速度快。
post:傳輸類型無限制、長度無限制、數據安全,速度慢。
enctype="multipart/form-data"表示數據進行2進制編碼;
當表單中有文件上傳時,必須指定它還要必須以post方式進行。
enctype是表單提交時,數據的編碼形式:
enctype=‘application/x-www-form-urlencoded’ url編碼
enctype=‘multipart/form-data’ 數據流編碼
enctype=‘text/plain’
target=’_blank’ 新開tab頁提交數據
<input type=“text” name=“htmer” autocomplete=“off” /> input表單輸入框不記錄輸入過信息的方法
input類型常用type屬性可以指定的GUI類型
readonly 只讀屬性
disabled 禁用,一但表單元素被禁用,那麼不會參與數據的提交
checked 單選或複選的默認選中。
selected 下拉菜單的默認選中。
提交數據
提交數據類型
<input type='text'> 單行文本
<input type='password'> 單行密碼-->
<input type='checkbox'> 複選-->
<input type='radio'> 單選
<input type='hidden'> 隱藏
<input type='file'> 文件
按鈕類型
<input type='submit'> 提交按鈕
<input type='button'> 普通按鈕
<button></button> 按鈕標籤
<button type='button'>
<img src='images/a4.jpg'>圖片提交
</button>
<input type='reset'> 重置按鈕
<input type='image'> 圖片提交按鈕
注意:如果需要參與數據的提交,那麼必須有name屬性。
2<select></select> 下拉菜單
注意:通過 <optgroup></optgroup> 標籤把相關的選項組合在一起
3<textarea></textarea> 多行文本
注意:多行文本域,沒有value屬性,標籤之間的內容會被當作value值,不支持html格式的值.