Servlet:Filter过滤器(核心控制器)、Listener监听器、Interceptor拦截器

Servlet:Filter过滤器(核心控制器)、Listener监听器、Interceptor拦截器

Filter过滤器

介绍

  Filter是一个可重复使用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一资源的响应。

生命周期

流程图

file

1. 启动核心控制器

扫描继承HttpServlet的子类,获取子类的注解WebServletvalue,使用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