Filter&Listener 过滤器和监听器
Filter&Listener
文章导读:Filter&Listener方面的讲解,接下来分享详细内容。
1、什么是Filter
- 概念:Filter 表示过滤器,是 JavaWeb 三大组件(Servlet(主要)、Filter(辅助)、Listener(辅助))之一。
- 作用:过滤器可以把对资源的请求拦截下来,从而实现一些特殊的通用操作功能
- 统一编码处理
- VIP功能
- 敏感字处理(例如:打游戏时候发的信息展示结果 我*你*)

2、Filter快速入门
1、首先创建一个filter-listeren的web项目,然后在项目中添加一个servlet(充当web资源)
@WebServlet(value = "/demo")
public class Demo1Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo1请求");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
}
}
2、 定义类,实现 Filter接口,并重写其所有方法,配置Filter拦截资源的路径:在类上定义 @WebFilter 注解
/**
* WebFilter 表示定义一个过滤器
* /* 表示对所有发送的请求进行拦截
*/
@WebFilter("/*")
public class Demo1filter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
public void destroy() {
}
}
3、在doFilter方法中输出一句话,并放行
/**
* 过滤器中的过滤方法
* @param servletRequest
* @param servletResponse
* @param filterChain
* @throws IOException
* @throws ServletException
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//放行前代码
System.out.println("demo1放行前代码");
//放行
filterChain.doFilter(servletRequest,servletResponse);
//放行后代码
System.out.println("demo1放行后代码");
}
3、Filter执行流程
通过快速入门的结果我们发现Filter的执行流如下:

从中可以发现规律:
1.访问web资源的时候首先会经过过滤器执行放行前代码
- 然后再访问web资源
- 最后再返回到过滤器执行放行后代码
思考:
- 放行后访问对应资源,资源访问完成后,还会回到Filter中吗?如果回到Filter中,是重头执行还是执行放行后的逻辑呢?
会
- 如果回到Filter中,是重头执行还是执行放行后的逻辑呢?
放行后逻辑
4、Filter使用细节
4.1、Filter 拦截路径配置
疑问:浏览器访问目标资源的路径,如果目标地址不存在,过滤器会不会运行?
“
如果请求的URL地址不存在,但是匹配过滤的地址,还是会执行过滤器
Filter 可以根据需求,配置不同的拦截资源路径
//@WebFilter(value = "/index.jsp")
//@WebFilter(value = "/user/*")
//@WebFilter(value = "*.jsp")
@WebFilter(value = "/*")
public class Demo1Filter implements Filter
- 拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截。
- 目录拦截:/user/*:访问/user下的所有资源,都会被拦截
- 后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截
- 拦截所有:/*:访问所有资源,都会被拦截
4.2、过滤器链
一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链

注:注解配置的Filter,优先级按照过滤器类名(字符串)的自然排序
4.3、XML配置Filter
步骤:
1.创建Filetr实现类
public class Demo1filter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
/**
* 过滤器中的过滤方法
* @param servletRequest
* @param servletResponse
* @param filterChain
* @throws IOException
* @throws ServletException
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//放行前代码
System.out.println("demo1放行前代码");
//放行
filterChain.doFilter(servletRequest,servletResponse);
//放行后代码
System.out.println("demo1放行后代码");
}
@Override
public void destroy() {
}
}
2.配置Filter拦截资源的路径:在web.xml中配置
<filter>
<filter-name>demo1</filter-name>
<filter-class>com.demo.filter.Demo1filter</filter-class>
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
发现XML配置的过滤器链,按照< filter-mapping>配置的先后顺序
5、Listener
- 概念:Listener 表示监听器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。
- 监听器可以监听就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件
- Listener分类:JavaWeb中提供了8个监听器
相关阅读
-
高校各专业录取分数线查询 查询各大学录取分数线的网站
全面的为大家介绍高校各专业录取分数线查询和查询各大学录取分数线的网站的电脑方面的小经验,接下来一起来看看吧。 今天整理了30所985院校2022年在苏具体的专业录取分,2023志愿填报可参
-
详解工业自动化领域通讯标准:Modbus协议全面解析
文章导读:详解工业自动化领域通讯标准的电脑方面的小经验,一定能解决您的问题的,一起来了解吧! Modbus协议是工业自动化领域中广泛使用的一种通讯协议。 它简单、方便、开放,因此在
-
网页制作模板代码 个人网页设计制作网站模板
关于这方面的知识你知道吗?网页制作模板代码和个人网页设计制作网站模板方面的知识,一起来了解了解吧。 想要制作一个网站,但不能编写代码吗?还是你找不到网页模板代码?在这种情
-
网络基础概念解析:什么是网段? 网络基础概念简析:网段的定义是
本文导读:网络基础概念解析的介绍,一起来了解了解吧。 在网络通信中,我们经常会听到“网段”这个词,那么网段究竟是什么意思呢? 本文将详细解析网段的概念和作用。 1. 网段的定义


