Servlet 2.5版本終止響應
***處優化細小又深奧,但做為規范中的一個例子還有蠻有趣的。Servlet 2.4規范規定響應在這幾種情況下應該是有效的,包括:在響應的setContentLength方法中內容已經明確說明,以及內容已經寫進了響應中。這種情況只有你的代碼像下面這樣才可以使響應重新定向:
◆response.setHeader("Host", "localhost");
◆response.setHeader("Pragma", "no-cache");
◆response.setHeader("Content-Length", "0");
◆response.setHeader("Location", http://www.apache.org");
Servlet技術忽略特定區域的標題頭,因為內容滿足0字節長度,響應就會立即生效。而在它開始之前,響應就已失效了!Servlet容器通常拒絕執行這種行為,而Servlet 2.5版本增加了“長度必須大于0”這個原則。
實例編碼:
Servlet 2.4 規范規定必須在調用request.getReader()方法之前調用request.setCharacterEncoding()方法。但是,如果你忽略這個原則而在其之后去調用request.setCharacterEncoding()方法,那么會產生什么后果,這個問題規范里并沒有說。為了簡便,現在消除這種情況!
Cross-context sessions(不同上下文目錄間的會話):
最近,關于Cross-context會話處理的規則已經明確說明。當Servlets指派從一個上下文到其他上下文的請求時,這個規則就發揮了作用??在目標調用過程中,包括哪些會話。這個版本的出現使得一個上下文目錄的主頁里的portlets可以通過幾種內部的命令來對別的上下文目錄里的portlets起作用。
Servlet 2.5版本明確指出一個上下文目錄里的資源可以訪問其他上下文目錄的session(會話),而不用考慮這個請求從哪里開始的。這意味著portlets可以脫離主頁的范圍而在自己的范圍里運行,而且這個規范還會應用在不兼容的Serlvet容器中。期待:
由于Servlet 2.5版本要保持一些舊的性質,幾個大的概念不得不延后到下一個階段。它們包括:
◆新的輸入/輸出(NIO)支持:使NIO通道更有利于Servlets進行客戶端通信成為可能。
◆過濾器wrap-under或wrap-over語義:有時用過濾器包裝請求,和/或者響應對象去修改方法行為或者啟用新的方法。當把這種包裝和服務器對請求和響應的包裝結合起來時,又應該怎么包裝在一起?
◆用于歡迎的Servlets文件:做為索引應該充當歡迎作用的文件嗎?在此之前,這個回答是肯定的。但是規范沒有明確說明如何使用這個功能,尤其在沒有索引的情況下。
◆用于歡迎的文件的分派規則:如何分派歡迎文件,這個細節并沒有完全說明,而是遺留了一些開放的缺口來應對不兼容問題。
◆登陸后選擇默認頁面:如果用戶通過他們的書簽訪問Servlet的登陸頁面,那么在成功登陸后頁面應該轉向哪里呢?這個問題至今尚未明確說明。
◆用戶的主題日志:在通過網站正確地注冊之后,不通過傳統地登陸方式沒有辦法使Servlet信任用戶。
【編輯推薦】




















