1. 程式人生 > >JSP常見編譯及動作指令

JSP常見編譯及動作指令

1、forward

forward是伺服器端去訪問目標資源,然後將獲取的目標資源返回給客戶端(瀏覽器),客戶端不知道目標資源的地址,所以客戶端的位址列不會發生變化。forward要訪問的資源必須是同一伺服器應用程式的資源,是同一次request請求訪問,原伺服器頁面和目標資源頁面可以共享request請求中的資料。jsp:forward只有一個page屬性用法如下:

<jsp:forward page="相對 URL 地址" />
常見應用場景:使用者登入的時候,根據使用者的角色名轉發至不同的模組

和forward有個類似功能的東西是redirect,redirect是伺服器端根據邏輯傳送包含狀態碼和新url的response包,客戶端根據狀態碼重新向新的url傳送request請求,客戶端的位址列會顯示新的url地址。redirect要訪問的資源可以是伺服器應用程式的內部資源,也可以是伺服器下不同應用程式的資源,甚至可以使不同站點的資源。因為redirect相當於是兩次獨立的request和response,因此Redirect沒有共享request資料資源的說法。redirect用法是response.sendRedirect("要跳轉的路徑");  forward也有類似的用法request.getrequestDispatcher("跳轉的路徑").forward(響應物件,請求物件);

其中request是jsp內建物件。

2、page

jsp頁面通常會被轉化為一個Servlet,page 指令允許通過類的匯入、servlet 超類的定製、內容型別的設定、以及諸如此類的事物來控制servlet的結構,page指令可以放在文件中的任何地方。page 指令可以定義下面這些大小寫敏感的屬性(大致按照使用的頻率列出):import、contentType、pageEncoding、session、isELIgnored(只限 JSP 2.0)、buffer、autoFlush、info、errorPage、isErrorPage、isThreadSafe、language 和 extends。這些屬性的用法可以參見:http://blog.csdn.net/microfhu/article/details/6944368

3、include

jsp中有兩個include標籤,一個是編譯指令,一個是動作指令。

編譯指令的用法是:<%@include file="resourcefile"%>

動作指令的用法是:<jsp:include page="resourcefile" flush="true" />(其中flush定義在包含資源前是否重新整理快取區)

使用include編譯指令,可以將一個外部檔案嵌入到當前JSP檔案中,同時解析這個頁面中的JSP語句。include既可以包含靜態的文字,也可以包含動態的JSP頁面。靜態的編譯指令include,是將被包含的頁面加入進來,生成一個完整的頁面。靜態的include語句不會檢查所包含JSP頁面的變化。

使用jsp:include動作指令是在主頁面被請求時,將次級頁面的輸出包含進來。儘管被包含的頁面的輸出中不能含有jsp,但這些頁面可以是其他資源所產生的結果。伺服器按照正常的方式對jsp:include包含的URL所對應的資源進行解釋,因而這個URL可以是Servlet或JSP頁面。伺服器以通常的方式執行被包含的頁面,將產生的輸出放到主頁面中,這種方式與RequestDispatcher類的include方法一致。它的優點是在被包含的頁面發生更改時,無須對主頁面做出修改。它的缺點是所包含的是次級頁面的輸出,而非次級頁面的實際程式碼,所以在被包含的頁面中不能使用任何有可能在整體上影響主頁面的JSP構造。

include編譯指令和include動作指令都可以滿足需求的情況下,優先使用include動作指令。因為include編譯指令是硬插入,直接將外部檔案嵌入到當前頁面中,不檢查外部檔案是否有錯,然後將被嵌入的頁面一起進行編譯,轉化為Servlet再轉成.class檔案,整個過程只有一次編譯。include動作指令是將外部檔案執行後(編譯、轉為Servlet、.class檔案),將結果插入到當前頁面中然後繼續執行當前頁面後面的操作,相當於有兩次編譯過程。兩種方式在可維護性和執行速度上各有優勢,但是通常我們會優先考慮include動作指令。

可參見:http://qingfeng825.iteye.com/blog/231873