过滤器
Java Web的三大组件
Servlet中组件一共有三种:Servlet、过滤器、监听器
组件 | 作用 | 实现接口 |
---|---|---|
Servlet | 是一个运行在服务器端的Java小程序,用来接收请求并做出响应 | javax.servlet.Servlet |
过滤器 | 用于拦截用户的请求和响应,并且修改请求中的数据,对数据进行处理 | javax.servlet.Filter |
监听器 | 监听Web程序在运行过程中对作用域操作的事件,并且对事件进行处理 多个不同的接口 | javax.servlet.XxxListener |
概念:
过滤器是服务器与客户端请求与响应的中间层组件,在实际项目开发中过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源。与其他的WEB应用程序组件不同的是,过滤器是采用了“链”的方式进行处理的。
流程图:
创建filter首先要实现filter接口
filter主要有三个方法,重写过滤器的doFilter(request,response,chain)方法,以及init,destroy方法这两个方法一般不需要重写
//拦截所有web资源
@WebFilter("/*")
//继承filter接口
public class CharsetFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CharsetFilter.init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("CharsetFilter.doFilter");
//处理乱码
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("CharsetFilter.destroy");
}
}
过滤器的特点:
他与servlet不同,Servlet是有访问的地址。不是由用户主动调用,而是自动执行,是通过匹配用户的访问地址去进行过滤。
过滤器的生命周期:
- Servlet是用户第1次访问的时候实例化,并且初始化。
- 过滤器是在Web服务器启动加载当前项目完毕以后自动实例化