Jsp指令(directive)

1、JSP指令簡介

  JSP指令(directive)是爲JSP引擎而設計的,它們並不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其他部分。html

  在JSP 2.0規範中共定義了三個指令:java

  • page指令web

  • Include指令編程

  • taglib指令 瀏覽器

 JSP指令的基本語法格式:<%@ 指令 屬性名=」值」 %> 服務器

2、Page指令

  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" ] 
%>

2.1 import屬性

在Jsp頁面中,Jsp引擎會自動導入下面的包工具

  • java.lang.*測試

  • javax.servlet.*

  • javax.servlet.jsp.*

  • javax.servlet.http.* 

能夠在一條page指令的import屬性中引入多個類或包,其中的每一個包或類之間使用逗號(,)分隔。

2.2 errorPage屬性

    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文件中設置的錯誤處理將不對該頁面起做用。

2.3 關於在web.xml中使用<error-page>標籤爲整個web應用設置錯誤處理頁面在IE下沒法跳轉的解決辦法

    這裏須要注意的是,若是錯誤頁面比較小,那麼當訪問服務器上不存在的web資源或者訪問服務器出錯時在IE瀏覽器下是沒法跳轉到錯誤頁面的,顯示的是ie本身的錯誤頁面,而在火狐和google瀏覽器下(其餘瀏覽器沒有測試過)是不存在注意的問題的。

  1. 修改IE瀏覽器的設置(不推薦)

    操做步驟:在IE【工具】->【Internet選項】->【高級】中勾掉【顯示友好http錯誤提示】

  2. 不修改IE瀏覽器的設置下確保定製的錯誤頁面的大小>1024字節

2.4 isErrorPage屬性顯式聲明頁面爲錯誤頁面

    若是某一個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頁面中拿到出錯的異常信息了。

3、include指令

  在JSP中對於包含有兩種語句形式:

  • @include指令 –靜態包含,編譯時包含,全部文件編譯成一個Servlet;

  • <jsp:include>指令–動態包含,運行時包含,每一個文件單獨編譯成一個.class文件;

3.1 @include指令

  @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和導包除外)。

3.2 @include指令和<jsp:include>比較

    使用@include能夠包含任意的內容,文件的後綴是什麼都無所謂。這種把別的文件內容包含到自身頁面的@include語句就叫做靜態包含,做用只是把別的頁面內容包含進來,屬於靜態包含。


    <jsp:include>指令爲動態包含,若是被包含的頁面是JSP,則先處理以後再將結果包含,而若是包含的是非*.jsp文件,則只是把文件內容靜態包含進來,功能與@include相似。

相關文章
相關標籤/搜索