JavaWeb(七)JSP-2

來源:互聯網
上載者:User

標籤:傳遞參數   技術分享   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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.