JSP(Java Server Page)和Servlet是JavaEE規範的兩個基本成員,是JavaWeb開發的重點。html
JSP的本質是Servlet,當用戶向指定的Servlet發送請求時,Servlet利用輸出流動態的生成HTML頁面,包括每個靜態的HRML標籤和全部在HTMl頁面中出現的內容。java
JSP頁面內容由2個部分構成小程序
1. JSP文件必須在JSP服務器內運行。緩存
2. JSP文件必須生成Servlet才能執行。服務器
3. 每一個JSP頁面的第一個訪問者速度很慢,由於必須等JSP編譯生成Servlet。session
4. JSP頁面的訪問者無需安裝任何客戶端(包括Java環境),由於JSP頁面輸送到客戶端的是標準的HTML頁面。app
JSP的基本語法與JAVA相似,如下爲特殊的幾個語法。jsp
<%-- JSP註釋部分,生成HTML後不顯示 --%> <!-- 增長JSP註釋,生成HTML後顯示 -->
<%! 聲明部分 %> <%-- 例子 --%> <%! public int count = 0; public String Greet() { count++; return "Hello for " + count + " times!"; } %>
該聲明的部分所聲明的成員變量及成員方法會轉換成對於Servlet類的成員變量及成員方法。ide
當屢次進入包含該聲明部分的JSP頁面時,能夠發現count成員變量的值在持續改變。由於全部的客戶端共享了同一個Servlet類,即共享同一個成員變量及成員方法等。這些變量及方法只有在Servlet類銷燬後纔再也不保存。編碼
<%= 表達式 %> <%-- 例子 --%> <%-- 將在頁面輸出3 --%> <%= 1 + 2 %> <%-- 將在頁面輸出1 --%> <%! public int a = 1; %> <%= a %>
能夠利用<%%>中包含任何可執行的java代碼。而且全部可執行的Java代碼均可以利用JSP腳本嵌入HTML頁面之中。
<ul> <% for (int i = 0; i < 10; i++) { %> <li><p>這是第<%= i %>行</p></li> <% } %> </ul>
須要注意的是,在JSP腳本部分聲明的變量爲局部變量,不能使用public,private這些訪問控制符修飾,也不可以使用static修飾。
使用以上編譯指令格式以下
<%@ 編譯指令名 屬性名="屬性值" %>
page指令位於JSP頁面代碼頂端,一個JSP頁面可以使用多條page指令。
屬性名 | 屬性值 | 默認值 |
language | 聲明當前JSP頁面使用腳本語言的種類 | JAVA |
extends | 指定JSP頁面編譯所產生的JAVA類所基礎的父類 | 無 |
import | 用來導入包 | 默認導入java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.* |
contentType | 設定生成網頁的文件格式和編碼字符集 | 格式:text/html,字符集:ISO-8859-1 |
pageEncoding | 生成網頁的編碼字符集 | 無 |
session | 設定這個JSP頁面是否須要HTTPSession | 無 |
buffer | 指定輸出緩衝區的大小,可設置none | 8KB |
autoFlush | 當輸出緩衝區即將溢出時,是否須要強制輸出緩衝區的內容,true爲正常輸出,false溢出時拋出溢出 | 無 |
info | 設置該JSP程序的信息,可看做說明,調用getSerletInfo()可獲取 | 無 |
errorPage | 指定錯誤處理頁面 | 無 |
isErrorPage | 設定本JSP頁面是否爲錯誤處理程序,若該頁面已經是錯誤處理程序,則無需設置errorPage值 | 無 |
<%-- 例子 --%>
<%@ page contentType="text/html; charset=utf8" language="java" errorPage="">
<%@ page import="java.util.*" %>
該指令可使用在文件的任何位置。使用該指令,能夠將一個外部文件嵌入到當前的JSP文件中,同時解析這個頁面中的JSP語句。
include能夠包含靜態頁面,也能夠包含動態的JSP頁面。
若被嵌入文件常常須要改變,則建議使用<jsp:include>,由於它是動態的包含。
<%-- 例子 --%> <%@ include file="exampleJSP" %> <jsp:include file="exampleJSP">
用於將頁面響應轉發到另外的頁面(靜態、動態或者Servlet)。
<%-- 例子 --%> <%-- jsp 1.0 --%> <jsp:forward page=""> <%-- jsp 1.1 及以上 --%> <jsp:forward page="xxx.jsp"> <jsp:param name="xx" value="xxx" /> </jsp:forward>
該指令轉發請求,但客戶端的請求參數不會改變,即用戶請求的地址不會改變。
該指令是一個動態include指令。
<%-- 例子 --%> <jsp:inlcude page="xx.jsp" flush="true"> <jsp:param name="xxxx" value="xxx" /> </jsp:include>
flush屬性用於指定輸出緩存是否轉移到被導入文件中。
true,則包含在其中。false,反之。
待更新
待更新
Servlet爲服務器端小程序,是運行在服務器端的程序,用於處理及響應客戶端的請求。
Servlet提供不一樣的方法用於響應客戶端請求。
另外兩個方法。
可看做「增強版「的Servlet,主要用於對用戶請求進行預處理,也能夠對HttpServletResponse進行後處理。
做用:
種類:用戶受權的Filter,日誌Filter,負責解碼的Filter,能改變XML內容的XSLT Filter等等。
三種基本方法:
利用url rewrite可實現url的僞靜態。
經常使用的Web事件監聽器接口: