JavaWeb__Filter过滤器

Filter过滤器简介

Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。

image
当浏览器访问服务器中的目标资源时,会被Filter拦截,在Filter中进行预处理操作,然后再将请求转发给目标资源。当服务器接收到这个请求后会对其进行响应,在服务器处理响应的过程中,也需要先将响应结果发送给拦截器,在拦截器中对响应结果进行处理后,才会发送给客户端。

在一个Web应用程序中可以注册多个Filter程序,每个Filter程序都可以针对某一个URL进行拦截。如果多个Filter程序都对同一个URL进行拦截,那么这些Filter就会组成一个Filter链(也叫过滤器链)。
image

FilterConfig接口
为了获取Filter程序在web.xml文件中的配置信息,Servlet API提供了一个FilterConfig接口,该接口封装了Filter程序在web.xml中的所有注册信息,并且提供了一系列获取这些配置信息的方法。
image

注意点

  1. 设置注解
    @WebFilter(filterName = "",urlPatterns = "")
    filterName:Filter的名字
    urlPatterns:Filter拦截的对象
  2. 放行
    使用 chain.doFilter(request, response);放行执行Servlet,但是完成Servlet操作后,还会执行doFilter后面的代码
package FilterTest;

import javax.servlet.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.PrimitiveIterator;

@WebFilter(filterName = "MyFilter1",urlPatterns = "/*")

public class MyFilter1 implements Filter {
    public void init(FilterConfig config) throws ServletException {
    }

    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        out.write("sd151");
//        chain.doFilter(request, response);
    }
}

应用

  1. 统一全站的编码方式。
    在Web开发中,经常会遇到中文乱码问题,现在,我们可以在Filter中对获取到的请求和响应消息进行编码,从而实现。

  2. 使用Filter实现动态页面静态化。
    在实际开发中,有时为了提高程序性能、减轻数据库访问压力以及搜索引擎的优化
    image
    当客户端首次访问页面时,Filter会自定义response输出缓存HTML源码。当客户端第二次访问页面时,就会直接访问静态页面,这样避免访问数据库。

posted @ 2022-06-01 16:59  kingwzun  阅读(36)  评论(0编辑  收藏  举报