JSP指令(directive)是爲JSP引擎而設計的,它們並不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其他部分。html
在JSP 2.0規範中共定義了三個指令:java
page指令web
Include指令編程
taglib指令 瀏覽器
JSP指令的基本語法格式:<%@ 指令 屬性名=」值」 %> 服務器
page指令用於定義JSP頁面的各類屬性,不管page指令出如今JSP頁面中的什麼地方,它做用的都是整個JSP頁面,爲了保持程序的可讀性和遵循良好的編程習慣,page指令最好是放在整個JSP頁面的起始位置。session
JSP 2.0規範中定義的page指令的完整語法:jsp
<%@ page [ language="java" ] [ extends="package.class" ] [ import="{package.class | package.*}, ..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ] [ autoFlush="true | false" ] [ isThreadSafe="true | false" ] [ info="text" ] [ errorPage="relative_url" ] [ isErrorPage="true | false" ] [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] [ pageEncoding="characterSet | ISO-8859-1" ] [ isELIgnored="true | false" ] %>
在Jsp頁面中,Jsp引擎會自動導入下面的包工具
java.lang.*測試
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
能夠在一條page指令的import屬性中引入多個類或包,其中的每一個包或類之間使用逗號(,)分隔。
errorPage屬性指明出錯後跳轉的錯誤頁面,errorPage屬性的設置值必須使用相對路徑,若是以「/」開頭,表示相對於當前Web應用程序的根目錄(注意不是站點根目錄),不然,表示相對於當前頁面 。
能夠在web.xml文件中使用<error-page>元素爲整個Web應用程序設置錯誤處理頁面。
<error-page>元素有3個子元素:<error-code>、<exception-type>、<location>
<error-code>子元素指定錯誤的狀態碼,例如:<error-code>404</error-code>
<exception-type>子元素指定異常類的徹底限定名,例如:<exception-type>java.lang.ArithmeticException</exception-type>
<location>子元素指定以「/」開頭的錯誤處理頁面的路徑,例如:<location>/ErrorPage/404Error.jsp</location>
注:若是設置了某個JSP頁面的errorPage屬性,那麼在web.xml文件中設置的錯誤處理將不對該頁面起做用。
這裏須要注意的是,若是錯誤頁面比較小,那麼當訪問服務器上不存在的web資源或者訪問服務器出錯時在IE瀏覽器下是沒法跳轉到錯誤頁面的,顯示的是ie本身的錯誤頁面,而在火狐和google瀏覽器下(其餘瀏覽器沒有測試過)是不存在注意的問題的。
修改IE瀏覽器的設置(不推薦)
操做步驟:在IE【工具】->【Internet選項】->【高級】中勾掉【顯示友好http錯誤提示】
不修改IE瀏覽器的設置下確保定製的錯誤頁面的大小>1024字節
若是某一個jsp頁面是做爲系統的錯誤處理頁面,那麼建議將page指令的isErrorPage屬性(默認爲false)設置爲」true」來顯式聲明這個Jsp頁面是一個錯誤處理頁面。
例如:將error.jsp頁面顯式聲明爲錯誤處理頁面
好處:
將error.jsp頁面顯式聲明爲錯誤處理頁面後,有什麼好處呢,好處就是Jsp引擎在將jsp頁面翻譯成Servlet的時候,在Servlet的 _jspService方法中會聲明一個exception對象,而後將運行jsp出錯的異常信息存儲到exception對象中。
因爲Servlet的_jspService方法中聲明瞭exception對象,那麼就能夠在error.jsp頁面中使用exception對象,這樣就能夠在Jsp頁面中拿到出錯的異常信息了。
在JSP中對於包含有兩種語句形式:
@include指令 –靜態包含,編譯時包含,全部文件編譯成一個Servlet;
<jsp:include>指令–動態包含,運行時包含,每一個文件單獨編譯成一個.class文件;
@include能夠包含任意的文件,固然,只是把文件的內容包含進來。
include指令用於引入其它JSP頁面,若是使用include指令引入了其它JSP頁面,那麼JSP引擎將把這兩個JSP翻譯成一個servlet。因此include指令引入一般也稱之爲靜態引入。
語法:<%@ include file=」relativeURL」%>,其中的file屬性用於指定被引入文件的路徑。路徑以「/」開頭,表示表明當前web應用。
include指令細節注意問題:
被引入的文件必須遵循JSP語法。
被引入的文件可使用任意的擴展名,即便其擴展名是html,JSP引擎也會按照處理jsp頁面的方式處理它裏面的內容,爲了見明知意,JSP規範建議使用.jspf(JSP fragments(片斷))做爲靜態引入文件的擴展名。
因爲使用include指令將會涉及到2個JSP頁面,並會把2個JSP翻譯成一個servlet,因此這2個JSP頁面的指令不能衝突(除了pageEncoding和導包除外)。
使用@include能夠包含任意的內容,文件的後綴是什麼都無所謂。這種把別的文件內容包含到自身頁面的@include語句就叫做靜態包含,做用只是把別的頁面內容包含進來,屬於靜態包含。
<jsp:include>指令爲動態包含,若是被包含的頁面是JSP,則先處理以後再將結果包含,而若是包含的是非*.jsp文件,則只是把文件內容靜態包含進來,功能與@include相似。