1. 程式人生 > >JavaWeb(十一)---過濾器(Filter)

JavaWeb(十一)---過濾器(Filter)

過濾器(Filter)

概念:

它會在一組資源的前面執行,它可請求得到資源,也可以不讓。過濾器具有攔截請求的功能

和Servlet一樣,Filter是單例併發的。

使用方法

  1. 寫一個類實現Filter介面
  2. 在web.xml上配置
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>

/----------------------------------------------------
<filter-mapping>下的<dispatcher>
設定過濾器的四種攔截方式
Data Type : string
Enumerated Values : 
	- FORWARD   轉發
	- INCLUDE    包含
	- REQUEST    重定向
	- ERROR        錯誤

<filter-mapping>下的<url-pattern>替換成<servlet-name>表示點名攔截該Servlet

Filter生命週期

  1. void init(FilterConfig filterConfig)
    1. 建立之後,立刻馬上(Filter會在Tomcat啟動時建立)
    2. FilterConfig 中的方法
      1. getFilterName() 獲得過濾器的名字
        getServletContext()  獲得ServletContext
        getInitParameter(String)  獲得某個初始化引數
        getInitParameterNames()  獲得所有初始化引數
  2. void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
    1. 每一次過濾都會執行
    2. FilterChain 中的doFilter(ServletRequest, ServletResponse)方法表示放行;相當於呼叫了目標Servlet的service方法,或者是執行下一個過濾器
  3. void destroy() 銷燬之前執行(Tomcat關閉時銷燬)