一個服務器上可以配好多站點,一個站點下可以配好多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頁面中導入標簽庫,講自定義標簽技術時講。