Filter

Javaweb三大组件:servlet,filter,listener

 

filter:过滤器

生活中的过滤器:净水器,空气净化器,土匪

 

 

web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。

我家相当于浏览器,我相当于一个请求,大山相当于服务器,外婆家就相当于资源。

请求在请求资源时会有过滤器拦截这个请求,过滤器可以增强请求的功能。

过滤器的作用:

一般用于完成通用的操作,例如:登录验证,统一字符编码,敏感字符过滤。

过滤器的快速入门:

步骤

1.定义一个类,实现接口Filter

2.复写方法

3.配置拦截路径

配置方法有两种:

web.xml

注解的方式

 

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

/**
 * 
 * @author 000
 * 过滤器快速入门
 */
@WebFilter("/*")//访问所有资源之前都会执行过滤器
public class FilterDemo01 implements Filter{

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        System.out.println("filterDemo01被执行了");
        
        //放行
        filterChain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        
    }

}

 

过滤器细节:

web.xml配置

过滤器执行流程

过滤器声明周期

过滤器配置详解

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Web_Filter_02</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <filter>
      <filter-name>demo1</filter-name>
      <filter-class>com.logan.study.filter.FilterDemo01</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>demo1</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

url-pattern表示拦截路径

 

过滤器的执行流程:

 

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

/**
 * Servlet Filter implementation class FilterDemo02
 */
@WebFilter("/*")
public class FilterDemo02 implements Filter {

    /**
     * Default constructor. 
     */
    public FilterDemo02() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Filter#destroy()
     * 在服务器正常关闭时,Filter对象会销毁,会执行destroy方法。一般用来释放资源
     */
    public void destroy() {
        System.out.println("FilterDemo02 destroy...");
        // TODO Auto-generated method stub
    }

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     * 每一次请求被拦截,会执行。
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        // place your code here

        System.out.println("请求来了");
        //对request消息进行增强
        // pass the request along the filter chain
        chain.doFilter(request, response);
        //对response消息进行增强
        System.out.println("响应回去了");
    }

    /**
     * @see Filter#init(FilterConfig)
     * 在服务器启动时,会创建filter对象,然后调用init方法。一般用来加载资源
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("FilterDemo02 init...");
    }

}

执行流程:

执行过滤器

执行放行资源

执行放行代码下面的代码。

 

过滤器声明周期方法:

init:在服务器启动后,会创建Filter对象,然后调用init方法,用于加载资源

doFilter:每一次请求被拦截资源时,会执行,可以执行多次。

destory:在服务器正常关闭后被调用,一般用于释放资源。

过滤器配置详解:

拦截路径的配置:

1.具体的资源路径:/index.jsp 只有访问index.jsp资源是,过滤器才会被执行

2.拦截目录:/user/*,访问/user下的所有资源时,过滤器会被执行

3.后缀名:*.jsp 访问所有后缀名为jsp的资源时,过滤器都会被执行

4.拦截所有资源:/*

 

拦截方式配置:资源被访问的方式

注解配置:

设置dispatcherType属性

1.REQUEST:默认值。浏览器直接请求资源。

2.FORWARD:转发访问资源

3.INCLUDE:包含访问资源

4.ERROR:错误跳转

5.ASYNC:

 

posted @ 2020-02-10 09:16  alittlecomputer  阅读(217)  评论(0编辑  收藏  举报