JSP指令簡介(轉)
一、JSP指令簡介
JSP指令(directive)是為JSP引擎而設計的,它們并不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其余部分。
在JSP 2.0規范中共定義了三個指令:
- page指令
- Include指令
- taglib指令
| 屬性 | 描述 | 默認值 |
|---|---|---|
| language | 指定JSP頁面使用的腳本語言。 | Java |
| extends | JSP被翻譯成Servlet程序,該屬性設置Servlet繼承的超類。 | HttpJspBase 類 |
| import | 引用外部類文件。 | 無 |
| session | 設置session是否有效。 | true (有效) |
| buffer | 定義輸出流緩沖區大小。 | 8KB |
| autoFlush | 設置是否自動刷新輸出緩沖區。 | true (自動) |
| isThreadSafe | 設置當前JSP頁面是否能夠同時處理一個以上的用戶請求。 | true (可以) |
| info | 設置JSP頁面的信息。 | 無 |
| isELIgnored | 是否忽略EL表達式。 | false (不忽略) |
| isErrorPage | 當前JSP頁面是否是錯誤處理頁面。 | false (不是) |
| errorPage | 設置異常處理頁面的URL,即某個 isErrorPage 屬性為 true 的頁面的URL。 | 無 |
| contentType | 設置 MIME 類型和編碼方式。 | text/html,IS08859-l |
language屬性
language 屬性用來指定當前JSP頁面所采用的腳本語言。當前JSP版本只能采用Java作為腳本語言。其實該屬性可以不設置,因為JSP默認的就是采用Java作為腳本。
language屬性的設置方法如下:
<%@ page language="java" %>
extends屬性
JSP其實是一個特殊的Servlet,最終會被翻譯成Servlet程序。
被翻譯成的Servlet一般都繼承一個父類,默認是 HttpJspBase 類,可以通過 extends 屬性來自定義繼承的超類。例如:
<%@ page language="java" extends="com.manongsushe.JSPDemo" %>
翻譯后的 Servlet 程序將繼承 com.manongsushe 包下的 JSPDemo 類,大家可以在 tomcat 的 work 目錄中找到 servlet 的源碼。
注意:盡量少使用extend屬性來指定超類,這樣就會把JSP代碼與Java代碼進行了綁定。
import屬性
import 屬性用來引用外部類文件,與Java中的 import 語句功能相同。
import 屬性引用的類文件包括:
- 系統環境變量中所指定目錄下的類文件;
- Tomcat 容器的 $CATALINA_HOME\lib 目錄下的零散類文件或者打包后的Jar文件;
- WEB-INF\classes目錄下的類文件以及WEB-INF\lib目錄下的jar文件。
注意:使用 import 屬性引用類文件必須寫全名(即帶上包名)。如果需要引用多個類文件,可以用逗號隔開。例如:
<%@ page import="java.util.*, javax.net.*, com.manongsushe.JSPDemo" %>
被翻譯成 Servlet 后,會變成標準的Java程序形式:
import java.util.*;
import javax.net.*;
import com.manongsushe.JSPDemo;
session屬性
session 屬性和上面介紹的屬性有所不同:上面介紹的屬性是在JSP頁面處于編譯階段執行的,而session屬性是在容器處于請求階段執行的。
session 是JSP內置對象(后續將會介紹),session 屬性就是用來設置 session 對象是否有效:"true" 表示有效,"false"表示無效。
session 屬性默認為 true,一般不設置。
buffer屬性
buffer 屬性用來設置輸出緩沖區的大小,默認為8KB(一般默認即可)。當遇到特殊情況時,才將它設置成8KB以上或者none(表示不使用輸出緩沖區)。
autoFlush屬性
autoFlush 屬性用來設置是否自動刷新輸出緩沖區(將緩沖區中的內容輸出到頁面顯示),可以和 buffer 一起使用,默認值為 "true",表示自動刷新。
如果設置為 "false",就需要編寫代碼手動刷新。
isThreadSafe屬性
isThreadSafe 屬性表示是否是線程安全的,用來設置當前JSP頁面是否能夠同時響應超過一個以上的用戶請求。
info屬性
info 屬性非常簡單,它并不對JSP頁面進行設置,只是定義了一個字符串,作為頁面的說明性文本,可以使用servlet.getServletInfo() 獲得它所定義的信息。例如:
<%@ page info="JSP演示頁面 -- Powered By 碼農宿舍" %>
<%
out.println(getServletInfo()); // 輸出 info 屬性所定義的字符串
%>
isELIgnored屬性
EL 是 expression language 的縮寫,即表達式語言(后續將會介紹)。isELIgonred 屬性用來設置JSP頁面中的EL是否可用,"true" 表示忽略,不可用,"false" 表示不忽略,可用。
例如,對于EL表達式 ${2000%20},當 isELIgnored 設置為 true 時,在JSP中會顯示字符串 ${2000%20};設置為 false 時,則顯示100。
isELIgnored 屬性默認值為 false,即EL可用。建議讀者使用EL,這樣會使得JSP的格式更加一致。
isErrorPage屬性
isErrorPage 屬性用來設置當前頁面是否是用來作為其他頁面的錯誤處理頁面。當需要統一處理JSP錯誤時,就可以使用 isErrorPage 和下面即將介紹的 errorPage 屬性,來設置錯誤處理頁面。
isErrorPage 屬性的值可以是 "true" 或 "false",默認為 "false"。為 true 時,可以使用隱式的exception內置對象(后續將會介紹)來處理請求異常。
errorPage屬性
errorPage 屬性一般和 isErrorPage 屬性結合使用,errorPage 屬性用來設置能夠處理異常的頁面,它是一個URL,即某個 isErrorPage 屬性值為 true 的頁面。
例如對 demo.jsp 設置了 errorPage 屬性:
<%@ page errorPage="doError.jsp" %>
當 demo.jsp 頁面出現異常錯誤的時候,就會自動跳轉到 doError.jsp 頁面進行錯誤處理。
在實際開發中,一般指定少數幾個頁面統一處理異常,其他頁面通過 errorPage 屬性來指定處理異常的頁面。
contentType屬性
contentType 屬性用來設置頁面的 MIME 類型和編碼方式。例如:
<%@ page contentType="text/html; charset=UTF-8" %>
常見的 MIME 類型有 text/plain、text/html(默認)、text/xml、image/gif、image/jpeg,常見的字符集有 UTF-8 和 GBK,一般使用 UTF-8,它支持的字符比 GBK 多很多。

浙公網安備 33010602011771號