servlet过滤器(Filter)

                                          过滤器(Filter)

  • 什么是过滤器

   过滤器是Javaweb的三大组件之一。他与servlet很相似,不过过滤器是用来拦截请求的,而不是处理请求的。

   当用户请求某个servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么,会继续执行用户请求的servlet,如果Filter不放行,那么就不会执行用户请求的Servlet。

 

 

他会在一组资源(servlet   jsp   CSS   HTML  .....)的前面执行

他可以让请求得到目标资源,也可以不让请求达到!

 

*过滤器有拦截请求的能力!

如:没有登录的人拦截  不然其访问对应的资源

 

过滤器如何编写?

  1. 写一个类实现javax.servlet.Filter接口

package com.igeek.filter;

 

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;

 

/**

 * @author www.igeehome.com

 *

 * TODO 第一个过滤器

 *

 * 2018年8月25日上午11:06:15

 */

public class FirstFilter implements Filter {

 

       /**

        * filter销毁是调用,释放资源

        */

       public void destroy() {

              System.out.println("销毁filter:FirstFilter");

       }     

 

       /**

        *  过滤处理

        * @param request

        * @param response

        * @param chain 一般用来调用下一个filter

        * @throws IOException

        * @throws ServletException

        */

       public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

                     throws IOException, ServletException {

              System.out.println("执行了FirstFilter的diFilter方法");

              //通过FilterChain调用下一个filter

              chain.doFilter(request, response);

       }

       /**

        * 初始化feilter

        * @param config 获得初始化参数

        * @throws ServletException

        */

       public void init(FilterConfig config) throws ServletException {

              System.out.println("初始化filter:FirstFilter");

       }

 

}

 

2.在web.xml中就行配置【与servlet非常相似】

<filter>

    <filter-name>firstFilter</filter-name>

    <filter-class>com.igeek.filter.FirstFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>firstFilter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

 

Tips当编写多个filter时,会按照配置顺序执行filter。

 

  • Filter的生命周期

和Serlvet几乎一致。

      在服务器启动时创建对象,之创建一次。在服务器关闭时销毁filter对象

初始化方法:

public void init(FilterConfig config)

filter对象创建之后执行,用于初始化filter对象。

Config参数可以获取初始化参数。

 

销毁的方法:

public void destroy()

在服务器关闭时,销毁filter对象之前执行,主要用于释放资源。

 

 

过滤器处理方法:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

处理要过滤的请求的方法。

参数:

ServletRequest HttpServletRequest的父接口。

实际上服务传入的对象就是HttpServletRequest类型的参数。

所以可以直接强制类型转化

HttpServletRequest req = (HttpServletRequest)request;

 

ServletResponse HttpServletResponse父接口。

服务器传入的实际也是HttpServletResponse对象。同样可以强制类型转换。
tips

filter中同样可以使request转发,或者response重定向。

 

FilterChain:主要是调用其方法 doFilter(request,response)
如果存在下一个filter,则直接调用下一个filter,如果不存在,则直接访问资源。

猜你喜欢

转载自blog.csdn.net/qq_15204179/article/details/82083912