Servlet之過濾器和監聽器

過濾器

一、概念java

  • 過濾器是可以對web請求和web響應的頭屬性和內容體進行操做的一種特殊web組件
  • 過濾器的特殊之處在於自己並不直接生成web響應,而是攔截web請求和響應,以便查看、提取或以某種方式操做客戶機和服務器之間交換的數據

二、過濾器的功能web

  • 分析web請求,對輸入數據進行預處理
  • 阻止web請求和響應的進行
  • 根據功能改動請求的頭信息和數據體
  • 與其餘web資源協做

三、過濾器的基本原理
imagetomcat

四、用法服務器

  • 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
 version="4.0">
    <!--配置過濾器-->
    <filter>
        <filter-name>filter</filter-name>
        <filter-class>com.syf.filter.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>FilterServlet</servlet-name>
        <servlet-class>com.syf.FilterServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FilterServlet</servlet-name>
        <url-pattern>/filter</url-pattern>
    </servlet-mapping>
</web-app>
  • 定義過濾器
package com.syf.filter;
import javax.servlet.*;
import java.io.IOException;
/**
 * 自定義過濾器,完成請求攔截及資源統一管理功能
 * 實現方式及生命週期:
 * 定義java類實現Filter接口
 * 重寫接口方法
 *      init:初始化 tomcat啓動的時候執行一次
 *      doFilter:進行攔截處理        每次請求都會執行
 *      destroy:銷燬 Tomcat關閉的時候執行
 */
public class MyFilter implements Filter {
    @Override
 public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("第一個過濾器初始化");
    }
    @Override
 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("第一個過濾器執行開始");
        //調用對應的Servlet
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("第一個過濾器執行結束");
    }
    @Override
 public void destroy() {
        System.out.println("第一個過濾器銷燬");
    }
}
  • 過濾器鏈

FilterChain接口用於調用過濾器鏈中的一系列過濾器
image
增長一個過濾器MyFilter2session

public class MyFilter2 implements Filter {
    @Override
 public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("第二個過濾器初始化");
    }
    @Override
 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("第二個過濾器執行開始");
        //調用對應的Servlet
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("第二個過濾器執行結束");
    }
    @Override
 public void destroy() {
        System.out.println("第二個過濾器銷燬");
    }
}

配置web.xmlapp

<filter>
    <filter-name>filter2</filter-name>
    <filter-class>com.syf.filter.MyFilter2</filter-class>
</filter>
<filter-mapping>
    <filter-name>filter2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  • 在項目中能夠定義多個過濾器,開始執行的時候,根據用戶的請求,把符合規則的過濾器挨個執行。
  • 最好每一個過濾器徹底獨立的過濾功能,不要將多個邏輯處理放置到同一個過濾器中,耦合度高,不利於維護
  • 在web.xml配置文件中,能夠配置過濾器過濾哪些請求

/*:匹配全部請求
/*.xx:匹配後綴爲xx的請求
/xx.xx:匹配請求爲xx.xx的請求ide

監聽器

一、做用
監聽做用域對象的建立與銷燬及屬性的相關配置,能夠添加一些公共的屬性配置,作邏輯判斷等
主要監聽三種做用域:ServletContext、session、requesturl

相關文章
相關標籤/搜索