標籤:style blog class c java ext
JSP指令和JSP動作
一、JSP page指令
在JSP中,主要有3種類型的指令:page、include、taglib。page指令允許我們通過類的匯入、serlvet超類的定製、內容類型的設定、以及諸如此類的事物來控制servlet的結構。page指令可以放在文檔中任何地方,可以定義下面這些大小寫敏感 屬性:import、contentType、pageEncoding、session、isELIgnored(只限JSP2.0)、buffer、autoFlush、info、errorPage、isErrorPage、isThreadSage、language和extends。
import
<%@ page import="package.class1,...,package.classN" %>
import是page的屬性中唯一允許在同一文檔中多次出現的屬性。儘管page指令可以出現在文檔中的任何地方,但一般不是將import語句放在文檔頂部附近,就是放在相應的包首次使用之前。
contentType和pageEncoding
<%@ page contentType="MIME-TYPE" %>
和下面的scriptlet所起到的作用基本相同。
<% response.setContentType("MIME-TYPE"); %>
兩者的區別有兩點:
1.response.setContentType使用明確的Java代碼,這是一些開發人員力圖避免的使用方式。
2.response.setContentType能夠有條件地調用,而page指令不能。條件性地設定內容的類型主要用在同一內容能夠以多種不同的形式進行顯示的情況下。
常用的MIME類型:
application/msword Word文檔
application/pdf PDF檔案
application/vnd.ms-excel Excel試算表
application/vnd.ms-powerpoint PowerPoint簡報
text/html
image/gif
如果希望同時更改內容的類型和字元集,可以使用下面的語句:
<%@ page contentType="someMimeType; charset=someCharacterSet" %>
但是如果只想改變字元集,使用pageEncoding屬性更為簡單。
日語JSP頁面使用下面的語句:
<%@ page pageEncoding="Shift_JIS" %>
errorPage和isErrorPage屬性
errorPage屬性指定頁面專用的錯誤頁面,如果要為整個WEB應用指定錯誤頁面,或者為應用中不同類型的錯誤指定錯誤處理頁面,則需要使用web.xml中的error-page元素。
<%@ page errorPage="Relative URL" % >
<%@ page isErrorPage="true" %>
二、jsp:include 動作和 include指令
<jsp:include page="relative-path-to-resource"/>
<%@ include file="Relative URL"%>
jsp:include 動作和 include指令根本性的區別在於被調用的時間不同
jsp:include 動作,在請求期間將其他頁面的輸出包含進來。包含的內容為頁面的輸出。
include指令,在首頁面轉換成servlet之前,將JSP代碼插入其中。包含的內容為檔案的實際內容。
jsp:include 動作,在被包含頁面發生更改時,無需對首頁面做出修改。
jsp:include 動作和 include指令根本性的區別在於被調用的時間不同
jsp:include 動作注意事項:不要將完整的HTML文檔作為被包含頁面,諸如DOCTYPE,BODY等標籤,被包含頁面中只能含有適合於出現在檔案插入點處的HTML標籤。
對於檔案包含,應該儘可能地使用jsp:include動作。僅在所包含的檔案中定義了首頁面要用到的欄位和方法,或者所包含的檔案設定了首頁面的響應前序時,才應該使用include指令(<%@ include ....%>)
include指令提供的其他功能:
include指令允許所包含的檔案中含有影響首頁的JSP代碼,比如響應前序的設定和欄位的定義。例如,假定snippet.jsp含有下面的代碼:
<%! int accessCount = 0; %>
這種情況下,可以在首頁中執行下面的任務:
<%@ include file="snippet.jsp"%>
<%= accessCount++ %>
當然,使用jsp:include時這是不可能的,因為accessCount變數未定義;首頁面不能成功的轉換成servlet、