java---过滤器,监听器

概念

过滤器JavaWeb三大组件之一,它与Servlet很相似!过滤器是用来拦截请求的,而不是处理请求的。

当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter"放行",那么会继承执行用户请求的Servlet;如果Filter不"放行",那么就不会执行用户请求的Servlet。

其实可以这样理解,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的Filter,然后是否"放行"由Filter来决定。可以理解为,Filter来决定是否调用Servlet!当执行完成Servlet的代码后,还会执行Filter后面的代码。

创建过滤器

在项目src下创建一个类,自己命名

(创建一个javaweb项目,然后创建一个servlet的前提下)

实现Filter接口,接口必须实现

重写里面的doFilter方法,必须重写这个方法。

如图所示,在doFilter方法里面有这个代码

复制代码
filterChain.doFilter(servletRequest,servletResponse);

这个代码什么意思呢

是让过滤器允许放行的意思,如果没有这个代码,过滤器就不会放行

然后在web.xml中进行Filter配置:

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| < filter > < filter-name > firstFilter****</**** filter-name > < filter-class > cn.tx.filter.MyFilter****</**** filter-class > </ filter > < filter-mapping > < filter-name > firstFilter****</**** filter-name > < url-pattern > /*</ url-pattern > </ filter-mapping > |

第一个<filter>括号中的filter-name是给过滤器起一个名字可以和类名不相同

class是filter的路径,包名+类名

第二个<filter-mapping>括号中name和上面的name一致

url-pattern和Servlet的url-pattern的匹配规则一模一样

  • 1.完全路径匹配 以/开头 例如 /aaa /aaa/bbb
  • 2.目录匹配 以/开头 例如 /aaa/* /*
  • 3.扩展名匹配 不能以/开头 例如 *.do *.action ....
复制代码
<url-pattern>/*</url-pattern>这个意思是给这个项目下的全部的路径统一处理

监听器

同样是创建一个类

监听器有好几个接口,主包选择这两个

实现接口的抽象类

所属接口 必须重写的方法
ServletContextListener contextInitialized(ServletContextEvent sce)``contextDestroyed(ServletContextEvent sce)
HttpSessionListener sessionCreated(HttpSessionEvent se)``sessionDestroyed(HttpSessionEvent se)
ServletRequestListener requestInitialized(ServletRequestEvent sre)``requestDestroyed(ServletRequestEvent sre)

idea可以直接生成

系统 主快捷键 备用快捷键(效果一致)
Windows/Linux Alt + Insert Ctrl + O
Mac Option + Return Cmd + O

在web.xml里面配置好

< listener >
< listener-class > cn.tx.listener.MyListener****</**** listener-class >
</ listener >

相关推荐
我登哥MVP4 小时前
Hadoop成长史-从Nutch子项目到大数据生态王者
java·大数据·hadoop·分布式·云原生·云计算
进击切图仔4 小时前
SAM3 微调标注流水线和 Label Studio
java·服务器·前端
名字还没想好☜4 小时前
Go error 处理:errors.Is/As 与错误包装
开发语言·后端·golang·go·错误处理
红糖奶茶4 小时前
Python 中 while 循环计数异常的常见原因分析与正确搓搓
开发语言·python
java1234_小锋4 小时前
Maven 4 要来了:15 年后,Java 构建工具迎来“彻底重构“
java·重构·maven
Lucky_Turtle4 小时前
【论文写作】PDF图片不清晰,打印生成PDF空白大,PDF字体嵌入
开发语言·pdf·c#
csdndenglu4 小时前
Easy3D:一个轻量级、易用、高效的C++库,用于处理和渲染3D数据,无复杂要求时可替代VTK
开发语言·c++·图形渲染·3d渲染
霸道流氓气质5 小时前
Java 工程师 AI 智能体学习路线 · 阶段 1:AI / LLM 基础认知 详解
java·人工智能·学习
JerrySir5 小时前
`spring.threads.virtual.enabled=true`:用三类负载定位等待、争用与拒绝
java·spring boot
尚早立志5 小时前
Spring Boot 之 BeanDefinitionLoader 详解
java·spring boot·后端