標籤:可讀性 響應 let 說明 local session mat 作用 jsp指令
1. JSP 指令: JSP指令(directive)是為JSP引擎而設計的,
它們並不直接產生任何可見輸出, 而只是告訴引擎如何處理JSP頁面中的其餘部分。
2. 在目前的JSP 2.0中,定義了page、include 和 taglib這三種指令
3. page 指令:
1). page指令用於定義JSP頁面的各種屬性, 無論page指令出現在JSP頁面中的什麼地方,
它作用的都是整個JSP頁面, 為了保持程式的可讀性和遵循良好的編程習慣, page指令最好是放在整個JSP頁面的起始位置。
2). 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 檔案中配置錯誤頁面:
<error-page>
<!-- 指定出錯的代碼: 404 沒有指定的資源, 500 內部錯誤. -->
<error-code>404</error-code>
<!-- 指定響應頁面的位置 -->
<location>/WEB-INF/error.jsp</location>
</error-page>
<error-page>
<!-- 指定異常的類型 -->
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/WEB-INF/error.jsp</location>
</error-page>
④. 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 file="b.jsp" %>
1). include 指令用於通知 JSP 引擎在翻譯當前 JSP 頁面時將其他檔案中的內容合并進當前 JSP 頁面轉換成的 Servlet 源檔案中,
這種在源檔案層級進行引入的方式稱之為靜態引入, 當前JSP頁面與靜態引入的頁面緊密結合為一個Servlet。
2). file屬性的設定值必須使用相對路徑
3). 如果以 / 開頭,表示相對於當前WEB應用程式的根目錄(注意不是網站根目錄),否則,表示相對於當前檔案。
4. jsp:incluce 標籤:
1). <jsp:include page="b.jsp"></jsp:include>
2). 動態引入: 並不是像 include 指令產生一個 Servlet 源檔案, 而是產生兩個 Servlet 源檔案, 然後通過一個方法的方式把目標頁麵包含
進來.
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "b.jsp", out, false);
5. jsp:forward:
1).
<jsp:forward page="/include/b.jsp"></jsp:forward>
相當於.
<%
request.getRequestDispatcher("/include/b.jsp").forward(request, response);
%>
2). 但使用 jsp:forward 可以使用 jsp:param 子標籤向 b.jsp 傳入一些參數. 同樣 jsp:include 也可以使用 jsp:param 子標籤.
<jsp:forward page="/include/b.jsp">
<jsp:param value="abcd" name="username"/>
</jsp:forward>
OR
<jsp:include page="/include/b.jsp">
<jsp:param value="abcd" name="username"/>
</jsp:include>
在 b.jsp 頁面可以通過 request.getParameter("username") 擷取到傳入的請求參數.
6. 關於中文亂碼:
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" 屬性即可.
<Connector connectionTimeout="20000" port="8989" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>
java web--jsp(4)