Java Web開發——Filter過濾器

1、過濾器web

1.1定義瀏覽器

過濾器是一個服務器端的組件,它能夠截取用戶端的請求與響應信息,並對這些信息進行過濾。緩存

1.2工做原理服務器

一、項目啓動時,從Web容器中加載過濾器;app

二、過濾器存在於用戶請求和Web資源之間;異步

三、用戶請求和Web響應之間的收發都經由過濾器按照過濾規則進行過濾篩選。jsp

1.3過濾器的生命週期async

實例化(web.xml加載)→初始化(init方法)→過濾(doFilter方法)→銷燬(destroy方法)url

一、初始化:當容器第一次加載該過濾器時,init() 方法將被調用。該類在這個方法中包含了一個指向 Filter Config 對象的引用。咱們的過濾器實際上並不須要這樣作,由於其中沒有使用初始化信息,這裏只是出於演示的目的。spa

二、過濾:過濾器的大多數時間都消耗在這裏。doFilter方法被容器調用,同時傳入分別指向這個請求/響應鏈中的 Servlet Request、Servlet Response 和 Filter Chain 對象的引用。而後過濾器就有機會處理請求,將處理任務傳遞給鏈中的下一個資源(經過調用 Filter Chain 對象引用上的 doFilter方法),以後在處理控制權返回該過濾器時處理響應。

三、銷燬:容器緊跟在垃圾收集以前調用 destroy()方法,以便可以執行任何須需的清理代碼。

過濾器鏈:服務器會按照web.xml中過濾器定義的前後順序組裝成一條鏈

1.4過濾器在web.xml中的基本配置

過濾器在web.xml中的的配置:

<filter>
    <filter-name>過濾器名稱</filter-name>
    <filter-class>過濾器完整類名</filter-class>
    <init-param>
        <description>描述信息,能夠省略</description>
        <param-name>參數名稱</param-name>
        <param-value>參數值</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>過濾器名稱</filter-name>
    <url-pattern>URL</url-pattern>
    <dispatcher>[REQUEST|INCLUDE|FORWARD|ERROR]</dispatcher>
</filter-mapping>

 

1.5過濾器的分類

過濾器的分類表
類型 做用
REQUEST 用戶直接訪問頁面時,web容器會調用該過濾器
FORWARD 目標資源是經過RequestDispatcher的forward方法訪問時,過濾器將被調用
INCLUDE 目標資源是經過RequestDispatcher的include方法調用時,過濾器將被調用
ERROR 目標資源是經過聲明式異常處理機制調用時,過濾器被將被調用
ASYNC(Servlet3.0新增長) 支持異步處理

2、過濾器的基本使用

2.1 過濾器類的設計

實現Filter接口,重寫init、doFilter、destroy方法

public class MyFilter implements Filter{
    public void init(FilterConfig filterConfig) throws ServletException{}
    /**
    *使瀏覽器不緩存頁面的過濾器
    */
    public void doFilter(ServlerRequest request,ServletResponse response,FilterChain filterChian) throws IOException,ServletException{
      ((HttpServletResponse) response).setHeader("Cache-Control","no-cache");
      ((HttpServletResponse) response).setHeader("Pragma","no-cache");
      ((HttpServletResponse) response).setDateHeader ("Expires", -1);
      filterChain.doFilter(request, response);//將處理任務傳遞給過濾器鏈中的下一個資源
    }
    public void destroy(){}
}

 

2.2 過濾器在web.xml中的註冊

一、REQUEST、FORWARD、INCLUDE等類型過濾器的註冊

<!-- 過濾器配置 -->
<filter>
    <filter-name>myFilter</filter-name>
    <filter-class>util.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/main.jsp</url-pattern>
    <dispatcher>[REQUEST|FORWARD|INCLUDE]</dispatcher>
</filter-mapping>

二、ERROR類型的過濾器註冊

<!-- 配置錯誤頁面,當出現404錯誤則跳轉至/error.jsp頁面 -->
<error-page>
    <error-code>404</error-code>
    <location>/error.jsp</location>
<error-page>
<!-- 過濾器配置 -->
<filter>
    <filter-name>errorFilter</filter-name>
    <filter-class>util.filter.ErrorFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>errorFilter</filter-name>
    <url-pattern>/error.jsp</url-pattern>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

 

3、Servlet3.0中過濾器的使用

加上 @WebFilter 註解便可,無需在web.xml中註冊

@WebFilter(servletNames={"SimpleServlet"},filterName="SimpleFilter")
public class MyFirstFilter implements Filter{}
@WebFilter經常使用屬性表
屬性名 類型 描述
filterName String 指定過濾器的name屬性,等價於<filter-name>
value String[] 等價於urlPatterns屬性,可是二者不要同時使用,若同時使用,優先使用value屬性
urlPatterns String[] 指定一組過濾器的URL匹配模式,等價於<utl-pattern>標籤
servletNames String[] 指定過濾器將應用於哪些Servlet。取值是@WebServlet中的name屬性值,或者是web.xml中的<servlet-name>取值
dispatcherTypes DispatcherType 指定過濾器的轉發模式。具體取值包括ASYNC、ERROR、FORWARD、INCLUDE、REQUEST
initParams WebInitParam[] 指定一組過濾器初始化參數,等價於<init-param>標籤
asyncSupported boolean 聲明過濾器是否支持異步操做模式,等價於<async-supported>標籤
description String 該過濾器的描述信息,等價於<description>標籤
displayName String 該過濾器的顯示名,等價於<display-name>標籤

 

 

參考資料:慕課網【JAVA Web開發技術應用——過濾器】http://www.imooc.com/learn/213

相關文章
相關標籤/搜索