標籤:傳遞參數 技術分享 config ignore 響應 簡介 說明 配置錯誤 https
1、JSP指令簡介
JSP指令(directive)是為JSP引擎而設計的,它們並不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其餘部分。
JSP指令的基本文法格式:
<%@ 指令 屬性名稱="值" %>
舉例:<%@ page contentType="text/html;charset=gb2312"%>
注意:屬性名稱部分是大小寫敏感的
在目前的JSP 2.0中,定義了page、include和taglib這三種指令,每種指令中又都定義了一些各自的屬性。
如果要在一個JSP頁面中設定同一條指令的多個屬性,可以使用多條指令語句單獨設定每個屬性,也可以使用同一條指令語句設定該指令的多個屬性。
第一種方式:
第二種方式:
2、Page指令
page指令用於定義JSP頁面的各種屬性,無論page指令出現在JSP頁面中的什麼地方,它作用的都是整個JSP頁面,為了保持程式的可讀性和遵循良好的編程習慣,page指令最好是放在整個JSP頁面的起始位置。
JSP 2.0規範中定義的page指令的完整文法:
①. import 屬性:指定當前 JSP 頁面對應的 Servlet 需要匯入的類。 <%@page import="java.text.DateFormat"%>
②. session 屬性:取值為 true 或 false,指定當前頁面的 session 隱藏變數是否可用, 也可以說訪問當前頁面時是否一定要產生 HttpSession對象。 <%@ page session="false" %>
③. errorPage 和 isErrorPage:
> errorPage 指定若當前頁面出現錯誤的實際響應頁面是什麼。其中 / 表示的是當前 WEB 應用的根目錄. <%@ page errorPage="/error.jsp" %> 。在響應 error.jsp 時, JSP 引擎使用的請求轉寄的方式。
> isErrorPage 指定當前頁面是否為錯誤處理頁面, 可以說明當前頁面是否可以使用 exception 隱藏變數。需要注意的是:若指定 isErrorPage="true",並使用 exception 的方法了,一般不建議能夠直接存取該頁面。 如何使客戶不能直接存取某一個頁面呢 ? 對於 Tomcat 伺服器而言,WEB-INF 下的檔案是不能通過在瀏覽器中直接輸入地址的方式來訪問的。但通過請求的轉寄是可以的。 還可以在 web.xml 檔案中配置錯誤頁面:
④. contentType:指定當前 JSP 頁面的響應類型。 實際調用的是 response.setContentType("text/html; charset=UTF-8");通常情況下,對於 JSP 頁面而言其取值均為 text/html; charset=UTF-8。 charset 指定返回的頁面的字元編碼是什麼,通常取值為 UTF-8
⑤. pageEncoding: 指定當前 JSP 頁面的字元編碼。通常情況下該值和 contentType 中的 charset 一致。
⑥. isELIgnored:指定當前 JSP 頁面是否可以忽略 EL 運算式。通常取值為 false。
3、include指令
include指令用於通知JSP引擎在翻譯當前JSP頁面時將其他檔案中的內容合并進當前JSP頁面轉換成的Servlet源檔案中,這種在源檔案層級進行引入的方式稱之為靜態引入,當前JSP頁面與靜態引入的頁面緊密結合為一個Servlet。
文法:
<%@ include file="relativeURL"%>
其中的file屬性用於指定被引入檔案的相對路徑。
細節:
(1)被引入的檔案必須遵循JSP文法,其中的內容可以包含靜態HTML、JSP指令碼元素、JSP指令和JSP行為元素等普通JSP頁面所具有的一切內容。
(2)被引入的檔案可以使用任意的副檔名,即使其副檔名是html,JSP引擎也會按照處理jsp頁面的方式處理它裡面的內容,為了見明知意,JSP規範建議使用.jspf(JSP fragments)作為靜態引入檔案的副檔名。
(3)在將JSP檔案翻譯成Servlet源檔案時,JSP引擎將合并被引入的檔案與當前JSP頁面中的指令元素(設定pageEncoding屬性的page指令除外),所以,除了import和pageEncoding屬性之外,page指令的其他屬性不能在這兩個頁面中有不同的設定值。
開啟a_jsp.java,查看裡面的內容
然後在a.jsp中添加如下內容,注意一定要放在引入b.jsp的前面
在b.jsp中擷取
4、JSP標籤
JSP還提供了一種稱之為Action的元素,在JSP頁面中使用Action元素可以完成各種通用的JSP頁面功能,也可以實現一些處理複雜商務邏輯的專用功能。
Action元素採用XML元素的文法格式,即每個Action元素在JSP頁面中都以XML標籤的形式出現。
JSP規範中定義了一些標準的Action元素,這些元素的標籤名都以jsp作為首碼,並且全部採用小寫,例如,<jsp:include>、<jsp:forward>、<jsp:param>等等。
5、<jsp:include>標籤
標籤用於把另外一個資源的輸出內容插入進當前JSP頁面的輸出內容之中,這種在JSP頁面執行時的引入方式稱之為動態引入。
page屬性用於指定被引入資源的相對路徑,它也可以通過執行一個運算式來獲得。
flush屬性指定在插入其他資源的輸出內容時,是否先將當前JSP頁面的已輸出的內容重新整理到用戶端。
查看a_jsp.java檔案
6、<jsp:include>標籤與include指令的比較
(1)<jsp:include>標籤是在當前JSP頁面的執行期間插入被引入資源的輸出內容,當前JSP頁面與被動態引入的資源是兩個彼此獨立的執行實體,被動態引入的資源必須是一個能獨立被WEB容器調用和執行的資源。include指令只能引入遵循JSP格式的檔案,被引入檔案與當前JSP檔案共同合被翻譯成一個Servlet的源檔案。
(2)使用<jsp:include>標籤和include指令都可以把一個頁面的內容分成多個組件來產生,開發人員不必再把頁首和頁尾部分的相同HTML代碼複製到每個JSP檔案中,從而可以更輕鬆地完成維護工作,但是都應注意最終的輸出結果內容應遵循HTML文法結構,例如,如果當前頁面產生了<html>、</html>、<body>、</body>等標記,那麼在被引入檔案中就不能再輸出<html>、</html>、<body>、</body>等標記。
(3)<jsp:include>標籤對JSP引擎翻譯JSP頁面的過程不起作用,它是在JSP頁面的執行期間才被調用,因此不會影響兩個頁面的編譯。由於include指令是在JSP引擎翻譯JSP頁面的過程中被解釋處理的,所以它對JSP引擎翻譯JSP頁面的過程起作用,如果多個JSP頁面中都要用到一些相同的聲明,那麼就可以把這些聲明語句放在一個單獨的檔案中編寫,然後在每個JSP頁面中使用include指令將那個檔案包含進來。
(4)<jsp:include>標籤使用page屬性指定被引入資源的相對路徑,而include指令使用file屬性指定被引入資源的相對路徑。
7、<jsp:forward>標籤
<jsp:forward>標籤用於把請求轉寄給另外一個資源
相當於
8、<jsp:param>標籤
當使用<jsp:include>和<jsp:forward>標籤引入或將請求轉寄給的資源是一個能動態執行的程式時,例如Servlet和JSP頁面,那麼,還可以使用<jsp:param>標籤向這個程式傳遞參數資訊。
9、JSP中文亂碼
(1)在 JSP 頁面上輸入中文,請求頁面後不出現亂碼:保證 contentType="text/html; charset=UTF-8", pageEncoding="UTF-8" charset 和 pageEncoding 的編碼一致,且都支援中文。通常建議取值為UTF-8, 還需保證瀏覽器的顯示的字元編碼也和請求的 JSP 頁面的編碼一致。
(2)擷取中文參數值: 預設參數在傳輸過程中使用的編碼為 ISO-8859-1
①. 對於 POST 請求:只要在擷取請求資訊之前(在調用 request.getParameter 或者是 request.getReader 等), 調用 request.setCharacterEncoding("UTF-8") 即可。
②. 對於 GET 請求:前面的方式對於 GET 無效;可以通過修改 Tomcat 的 server.xml 檔案的方式。參照 http://localhost:8989/docs/config/index.html 文檔的 useBodyEncodingForURI 屬性. 為 Connector 節點添加 useBodyEncodingForURI="true" 屬性即可。
JavaWeb(七)JSP-2