JavaWeb__Filter过滤器
Filter过滤器简介
Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。
当浏览器访问服务器中的目标资源时,会被Filter拦截,在Filter中进行预处理操作,然后再将请求转发给目标资源。当服务器接收到这个请求后会对其进行响应,在服务器处理响应的过程中,也需要先将响应结果发送给拦截器,在拦截器中对响应结果进行处理后,才会发送给客户端。
在一个Web应用程序中可以注册多个Filter程序,每个Filter程序都可以针对某一个URL进行拦截。如果多个Filter程序都对同一个URL进行拦截,那么这些Filter就会组成一个Filter链(也叫过滤器链)。
FilterConfig接口
为了获取Filter程序在web.xml文件中的配置信息,Servlet API提供了一个FilterConfig接口,该接口封装了Filter程序在web.xml中的所有注册信息,并且提供了一系列获取这些配置信息的方法。
注意点
- 设置注解
@WebFilter(filterName = "",urlPatterns = "")
filterName:Filter的名字
urlPatterns:Filter拦截的对象 - 放行
使用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);
}
}
应用
-
统一全站的编码方式。
在Web开发中,经常会遇到中文乱码问题,现在,我们可以在Filter中对获取到的请求和响应消息进行编码,从而实现。 -
使用Filter实现动态页面静态化。
在实际开发中,有时为了提高程序性能、减轻数据库访问压力以及搜索引擎的优化
当客户端首次访问页面时,Filter会自定义response输出缓存HTML源码。当客户端第二次访问页面时,就会直接访问静态页面,这样避免访问数据库。