URL重寫、Filter(過濾器)、監聽器(Listener)
14.URL重寫 也屬於會話追蹤技術的一種.
URL重寫解決了這樣一個問題: 當前瀏覽器把cookie禁用之後,瀏覽器在發請求的時候,就不會把cookie帶到伺服器端了(其中最重要的也包括JSESSIONID),因為禁用cookie之後瀏覽器拒絕一切站點向瀏覽器寫入cookie的(注意再禁用之前是否已經有一些已經存在的cookie了),這樣的話,多個請求就不能在伺服器端拿到同一個session物件了(因為傳送請求的時候沒有把JSESSIONID的值傳給伺服器)。
把JSESSIONID從客戶端傳給伺服器,有倆種方式: 1.JSESSIONID儲存在cookie檔案中,瀏覽器傳送請求的時候把這個cookie檔案中的資料帶給伺服器(cookie).
2.通過傳參的方式,把JSESSIONID的值通過要訪問的URL傳給伺服器.(URL重寫)
如何實現URL重寫: String url = resp.encodeURL(".."); 這個方法引數就是我們要訪問的URL,這個方法會把重寫後的URL以字串的形式返回.
例如:在一個超連結中,本來要訪問的URL是:<a href="GetDataFromSession"> 重寫後: <a href="GetDataFromSession;jsessionid=5480EF9016295A73DC56731A2F123246">
15.Filter(過濾器) 作用:在一個請求去訪問某個資源的時候,filter可以在這個請求訪問到這個資源之前,把請求攔下,然後做出一系列的處理或者判斷(比如編碼的轉換,資訊的過濾、許可權的判斷、是否已經登入的驗證等等),最後filter再決定是否要讓這個請求去訪問那個資源.
如何寫一個filter: 寫一個java類,然後實現javax.Servlet.Filter介面
這個介面中有三個方法: init destroy doFilter init:這個過濾器類被伺服器建立物件的時候會呼叫到這個方法。 destroy:過濾器物件被銷燬的時候會呼叫這個方法。 doFilter:當過濾器攔截到請求的時候,會呼叫這個doFilter. 注意: public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
這個方法有三個引數,第三個引數表示的一個過濾器鏈物件,因為同一個請求有可能要依次的通過倆個或者多個過濾器,在web中把這樣多個過濾器看做一個過濾器鏈條物件,就是用這個FilterChain型別的物件來表示。 chain.doFilter(req,res)表示把當前的req和res傳給這個過濾器鏈條中的下一個過濾器進行過濾,如果說鏈條中已經沒有下一個過濾器,那麼就把這次訪問放行,讓它去訪問它真正要訪問的資源.
注意:如果這次訪問沒有符合過濾器中的條件,那麼我們就不用呼叫chain.doFilter(req,res)這個方法把這次訪問放行了,而是可以直接進行跳轉(伺服器內部跳轉或者客戶端重定向),跳轉到一個頁面,頁面中提示使用者一下,為什麼這次不讓他去訪問,比如說 還沒有登入、許可權不夠等等原因。
最後還需要在web.xml檔案中進行配置: 例如: <filter> <filter-name>encodingFilter</filter-name> <filter-class>com.briup.filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
這個配置和servlet的配置很相似。
<url-pattern>/*</url-pattern> 表示當前這個過濾器,要攔截的路徑是/*,表示專案中所有的資源。 <url-pattern>/servlet/*</url-pattern> 表示當前這個過濾器,要攔截的路徑是/servlet/*,也就是專案下面的servlet路徑下面的所有資源.
<url-pattern>/firstServlet</url-pattern> 表示當前這個過濾器,要攔截的路徑是/firstServlet,也就是說這個過濾器只會攔截這一個路徑.
如果要攔截的路徑有倆個,我們可以配置倆個<filter-mapping>標籤分別都去和同一個<filter>標籤對應。
注意:1.這裡的/代表位址列中專案名字後的/ 2.某一個資源是不是會被攔截,要看位址列中會不會出現我們在web.xml檔案所配置的要攔截的路徑.
16.監聽器(Listener) 作用:監聽web中的一些事件的發生,如果某些事件一旦發生了,那麼這個監聽器就會呼叫某些方法進行處理. 比如:在web中可以監聽request物件的建立和銷燬.
如何去寫一個監聽器: 1.寫一個類,實現一個特點的介面。 2.在web.xml檔案中進行配置。 web.xml: <listener> <listener-class>com.briup.listener.RequestListener</listener-class> </listener> 比如: 監聽request物件的建立和銷燬要實現介面ServletRequestListener 監聽session物件的建立和銷燬要實現介面HttpSessionListener 監聽application物件的建立和銷燬要實現介面
JSP 屬於動態網頁技術的一種. (servlet、jsp、PHP、asp等等)