JAVA Web过滤器和监听器
程序员文章站
2022-05-23 08:35:23
...
JAVA Web过滤器和监听器
2020/9/16
javaweb中的三大主件:servlet,filter,lisentener。
1.Filter(过滤器)
1.过滤器的概念
附上视频截图
2.过滤器快速入门
附上视频笔记
代码
package cn.zsc.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/***
* 过滤器的快速入门
*/
//过滤器的注解
@WebFilter("/*")
public class filterDemo1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤器运行了");
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
这里使用的是@webFilter的注解来配置过滤器,和servlet一样,注解里的value可以省略,直接使用“/*”的方式来配置过滤器,使用/*表示对所有的servlet进行拦截,进行处理然后再放行。
xml配置方式
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--过滤器的xml配置文件-->
<filter>
<filter-name>demo1</filter-name>
<filter-class>cn.zsc.filter.filterDemo1</filter-class>
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
<!--拦截路径-->
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
在url-pattern里来决定要拦截的servlet的路径,这里就会有一个拦截路径的问题
拦截路径
拦截方式配置
拦截方式配置:资源被访问的方式
1.注解配置:
设置dispatcherTypes属性
- REQUEST:默认值。浏览器直接请求资源
- FORWARD:转发访问资源
- INCLUDE:包含访问资源
- ERROR:错误跳转资源
- ASYNC:异步访问资源
2.web.xml配置
设置<dispatcher></dispatcher>
标签即可
过滤器的执行流程和周期
- 过滤器执行流程
- 执行过滤器
- 执行放行后的资源
- 回来执行过滤器放行代码下边的代码
- 过滤器生命周期方法
- init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
- doFilter:每一次请求被拦截资源时,会执行。执行多次
- destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源
多个过滤器问题
过滤器是可以存在多个,就是哪个过滤器先执行,哪个过滤器后执行的问题
分两种情况
1.web注解的情况
按照类名的字符串比较规则比较,值小的先执行
执行顺序:如果有两个过滤器:过滤器1和过滤器2
1. 过滤器1
2. 过滤器2
3. 资源执行
4. 过滤器2
5. 过滤器1
2.xml配置文件情况<filter-mapping>
谁定义在上边,谁先执行
2. Listener:监听器
附上视频笔记
监听器这里就不过多介绍,只要了解监听器的使用就可以了,因为后面有些框架会通过监听器,不需要自己去写监听器
上一篇: 使用过滤器递归打印多级目录
推荐阅读
-
Java web Filter, Strurs2 Interceptor 和 SpringMVC Interceptor 三者之间的联系与区别
-
java web学习_浅谈request对象中get和post的差异
-
Java Web实现session过期后自动跳转到登陆页功能【基于过滤器】
-
java web在高并发和分布式下实现订单号生成唯一的解决方案
-
Java Web学习之Cookie和Session的深入理解
-
Java Web学习之Cookie和Session的深入理解
-
搭建java WEB开发环境和应用
-
传智播客java web 过滤器
-
浅析JAVA中过滤器、监听器、拦截器的区别
-
Filter过滤器和Listener监听器详解