程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> JSP指令

JSP指令

編輯:關於JSP

 一個服務器上可以配好多站點,一個站點下可以配好多web應用。

1. JSP指令

JSP指令(directive)是為JSP引擎而設計的,它們並不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其余部分。在JSP 2.0規范中共定義了三個指令:page指令、Include指令、taglib指令。

l    JSP指令的基本語法格式:<%@ 指令 屬性名="值" %>

   舉例:<%@ pagecontentType="text/html;charset=gb2312"%>

l    如果一個指令有多個屬性,這多個屬性可以寫在一個指令中,也可以分開寫。例如:

      <%@ pagecontentType="text/html;charset=gb2312"%>

      <%@ pageimport="java.util.Date"%>

   也可以寫作:

   <%@ pagecontentType="text/html;charset=gb2312"import="java.util.Date"%>

2. Page指令

l    page指令用於定義JSP頁面的各種屬性,無論page指令出現在JSP頁面中的什麼地方,它作用的都是整個JSP頁面,為了保持程序的可讀性和遵循良好的編程習慣,page指令最好是放在整個JSP頁面的起始位置。

l    JSP 2.0規范中定義的page指令的完整語法:

    下面語法中加粗的都是常用的,不加粗的是不常用的或服務器默認的、自動設置的。

<%@page

   [ language="java" ]

   [ extends="package.class"]

   [ import="{package.class| package.*}, ..." ]

   JSP 引擎自動導入下面的包:

ü    java.lang.*

ü    javax.servlet.*

ü    javax.servlet.jsp.*

ü    javax.servlet.http.*

l    可以在一條page指令的import屬性中引入多個類或包,其中的每個包或類之間使用逗號分隔:

      <%@ pageimport="java.util.Date,java.sql.*,java.io.*"%>

l    上面的語句也可以改寫為使用多條page指令的import屬性來分別引入各個包或類:

      <%@ pageimport="java.util.Date"%>

      <%@ pageimport="java.sql.*"%>

      <%@ pageimport="java.io.*"%>

   [ session="true | false" ]

   [ buffer="none | 8kb | sizekb"]

   [ autoFlush="true | false" ]

   [ isThreadSafe="true |false" ]

   [ info="text" ]

   [ errorPage="relative_url"]

l    errorPage屬性的設置值建議使用相對路徑(不寫“/”或者寫“./”);也可以使用絕對路徑,但是這裡用的絕對路徑有些特殊,即以“/”開頭,表示相對於當前WEB應用程序的根目錄(注意不是站點根目錄),否則,表示相對於當前頁面。

l    也可以在web.xml文件中使用<error-page>元素為整個WEB應用程序設置錯誤處理頁面,其中的<exception-type>子元素指定異常類的完全限定名,<location>元素指定以“/”開頭的錯誤處理頁面的路徑。

l    如果設置了某個JSP頁面的errorPage屬性,那麼在web.xml文件中設置的錯誤處理將不對該頁面起作用。

l    JSP引擎會根據page指令的contentType屬性生成相應的調用ServletResponse.setContentType方法的語句。

l    page指令的contentType屬性還具有說明JSP源文件的字符編碼的作用。

   [ isErrorPage="true | false" ]

   [ contentType="mimeType [ ;charset=characterSet ]" |"text/html ; charset=ISO-8859-1"]

   [ pageEncoding="characterSet | ISO-8859-1" ]

   [ isELIgnored="true | false" ]

%>

1).在IE【工具】->【Internet選項】->【高級】中勾掉【顯示友好http錯誤提示】;
2).確保error.jsp的大小>1024字節。

l    使用page指令解決JSP中文亂碼

l     JSP程序存在有與Servlet程序完全相同的中文亂碼問題

l    輸出響應正文時出現的中文亂碼問題

l    讀取浏覽器傳遞的參數信息時出現的中文亂碼問題

l     JSP引擎將JSP頁面翻譯成Servlet源文件時也可能導致中文亂碼問題

l    JSP引擎將JSP源文件翻譯成的Servlet源文件默認采用UTF-8編碼,而JSP開發人員可以采用各種字符集編碼來編寫JSP源文件,因此,JSP引擎將JSP源文件翻譯成Servlet源文件時,需要進行字符編碼轉換。

l    如果JSP文件中沒有說明它采用的字符集編碼,JSP引擎將把它當作默認的ISO8859-1字符集編碼處理。

l    如何解決JSP引擎翻譯JSP頁面時的中文亂碼問題

l    通過page指令的contentType屬性說明響應正文的編碼

l    page指令的pageEncoding屬性說明JSP源文件的字符集編碼;設置了pageEncoding屬性後就不用再設置contenttype屬性了。

3. include指令

l    include指令用於引入其它JSP頁面,如果使用include指令引入了其它JSP頁面,那麼JSP引擎將把這兩個JSP翻譯成一個servlet。所以include指令引入通常也稱之為靜態引入。

l    語法:<%@ includefile="relativeURL"%>

   其中的file屬性用於指定被引入文件的路徑。路徑以“/”開頭,表示代表當前web應用。

l    細節:

ü     被引入的文件必須遵循JSP語法。

ü     被引入的文件可以使用任意的擴展名,即使其擴展名是html,JSP引擎也會按照處理jsp頁面的方式處理它裡面的內容,為了見明知意,JSP規范建議使用.jspf(JSP fragments)作為靜態引入文件的擴展名。

ü     由於使用include指令將會涉及到2個JSP頁面,並會把2個JSP翻譯成一個servlet,所以這2個JSP頁面的指令不能沖突(除了pageEncoding和導包除外)。

   注意:include指令與分派器的include()方法的區別:

    Include指令是靜態引入,tomcat等服務器把多個jsp翻譯成servlet類時只產生一個java文件,多個jsp文件被加載到了一個servlet類;而分派器的include()方法是動態導入,他會有幾個jsp就生成幾個jservlet類;後者的效率比前者低一些,因為前者只需要翻譯一個java類。分派器的相關用法:request.getRequestDispatch().include(request,response);

4.taglib指令

l    Taglib指令用於在JSP頁面中導入標簽庫,講自定義標簽技術時講。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved