1. 程式人生 > >java web--jsp(4)

java web--jsp(4)

tag asp 並不是 表示 clas value 關於 調用 isp

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)