過濾器的使用和總結(java)
今天學習到了過濾器的使用,在這裡總結一下!過濾器在瀏覽器和伺服器中間,相當於一層篩子,只把符合條件的請求傳遞到伺服器層.
過濾器的作用:(生命週期:伺服器的啟動到伺服器的關閉)
- 把伺服器接收到的請求和相應給瀏覽器的資源進行統一的管理!
- 保護servlet能接受正常的請求
具體案例:
- 統一編碼格式設定。
- session管理
- 許可權管理
- 資源管理
過濾器所處的位置:
使用:第一步,需要建立一個普通的java實體類然後繼承Fileter介面,在覆寫介面中的方法.
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化)");//伺服器啟動就立即執行,資源初始化.
}
@Override
public void doFilter(
FilterChain chain) throws IOException, ServletException {
System.out.println("執行");//攔截請求方法,在這裡可以管理資源 注意:這裡需要對請求進行放行
//符合條件的瀏覽器請求放行
chain.doFilter(request, response);
}
@Override
public void destroy() {
System.out.println("銷燬");//伺服器關閉執行
}
第二步,需要在web.xml中配置過濾器
<filter>
<filter-name>myFilter</filter-name> <!-- 過濾器名字-->
<filter-class>com.wzy.filter.MyFilter</filter-class> <!-- 過濾器聯絡的class名字 配置的時候要記著ctrl+單擊,檢視一下是否能跳轉到具體的class中,如果可以跳轉那麼沒問題!如果不行那麼檢查com.wzy.filter.MyFilter這一部分的程式碼!-->
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
<!--
<url-pattern>這裡的 /* 是對有所的請求進行過濾! (相當於小區門口的保安人員!屬於第一級過濾)
如果想要設定多個過濾器,那麼改成 *.Type (--這裡的Type是字尾的統稱.只對Type這種型別的請求進行過濾!相當於小區每棟樓的管理人員!屬於第二級過濾,)
要是想要過濾具體的servlet請求就需要將url-pattern設定成 /servlet名字.Type 就可以保護servlet!(相當於自己養的看門狗!屬於第三級過濾)
-->
</filter-mapping>
執行順序:
- 瀏覽器發起請求到伺服器,伺服器接收到請求後,根據URI資訊在web.xml中找到對應的過濾器執行doFilter方法,該方法對此次請求進行處理後如果符合要求則放行。
- 放行後如果還有符合要求的過濾則繼續進行過濾,找到執行對應的servlet進行請求處理。servlet對請求處理完畢後,也就service方法結束了。還需繼續返回相應的doFilter方法繼續執行。
總結:
過濾器就是先宣告一個class,然後修改web.xml中的程式碼.主要涉及到的標籤有:
<filter>
<filter-name>俺的名字</filter-name>
<filter-class>class類的名字</filter-class>
</filter>
<filter-mapping>
<filter-name>俺的名字(和上邊一致)</filter-name>
<url-pattern>/*</url-pattern> <!-- 需要過濾那些東西-->
</filter-mapping>