Filter过滤器
介绍
Filter是一个可重复使用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一资源的响应。
生命周期
流程图
1. 启动核心控制器
扫描继承HttpServlet
的子类,获取子类的注解WebServlet
的value
,使用Map<url,class.name>
的形式存储
2. 使用核心控制器(过滤器)对请求进行拦截
接收请求
用户请求进行解析,获取用户需要访问的Servlet(接口)
。
3. 转发到对应的Servlet(接口)
(如果没有对应接口则转发至负责处理静态资源的Servlet
)
调用对应的Servlet(接口)
并传入HttpServletResponse(用户请求)
和HttpServletResponse(用户响应对象)
4. 返回响应对象
Listener监听器
介绍
Listener是监听器,通过Listener可以监听Web服务器中某一个执行动作,并根据其要求作出相应的响应。通俗的来说就是在Application,Session,Request三个对象创建、消亡或者往其中添加、修改、删除属性时自动执行代码功能的组件。
生命周期
Listener的生命周期类似于Servlet和Filter,在这里不做过多论述,不过在这里,我们应该更多的关注其在web服务器中的执行顺序,在web服务器中,它们的执行顺序如下:
context-param——>listener——>filter——>servlet
Interceptor拦截器
介绍
Interceptor是拦截器,在JavaWeb中主要是面向切面编程时使用,一般在调用一个方法前亦或是调用一个方法后执行该Interceptor拦截器中的方法。在JavaWeb中应用拦截器,比如说我们想得知一个完整请求的响应时间,我们就可以通过添加拦截器的方式,在请求开始前记录一个开始时间,在请求结束后,记录一个结束时间,用结束时间减去开始时间,即可获取该次请求所消耗的时间。这样以来就可以更加方便我们对于程序的优化处理。
生命周期
以Spring为例,在项目中加载了spring-servlet.xml以后,即开始初始化相应的拦截器,当页面请求action时,在开始前调用preHandle(),在截止后调用afterCompletion(),以此完成相应的拦截操作。
补充资料
个人项目
https://github.com/lldwb/NoitaSaver.git
其中NoitaSaverServer
模块中模拟了核心控制器
查看资料
https://blog.csdn.net/ZZY1078689276/article/details/81239808
https://juejin.cn/post/7102440874449043469