J2EE基础知识-filter与servlet
参考文章:servlet 和 filter执行顺序
Filter |
Servlet |
|
接口 |
实现 |
实现 |
使用步骤 |
1、创建类,继承接口 2、实现方法
3、配置 |
1、创建类,继承接口 2、实现方法
3、配置 |
初始化时间 |
Servlet容器启动之后即初始化 |
初始化可以在容器启动后被调用但需要配置。 |
调用顺序 |
1. 按照 2. 通过调用 3. 进入 4. |
1.按照 2.调用之前事先执行满足条件的 |
销毁 |
服务器停止后销毁,晚于Servlet销毁之后 |
服务器停止后销毁 |
作用 |
1. 在 2. 根据需要检查 3. 在 4. 根据需要检查 |
主要是处理客户端的请求并将其结果发送到客户端。 |
注:
-
Servlet
是先于Filter
创建,先于Filter
销毁,但晚于Filter
调用。 OncePerRequestFilter
记住这个类,此类是许多功能Filter
的父类,其doFilter()
值得打断点,看内容。(spring、shiro 都有相同名称的类,而且功能相近)- 注意OncePerRequestFilter 方法的功能,以下是简化代码后的 doFilter()方法
查看代码
public final void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws ServletException, IOException { if (skipDispatch(**) || shouldNotFilter(**)) { // 此方法是进入Servlet方法(也就是具体的业务) filterChain.doFilter(request, response); }else if (hasAlreadyFilteredAttribute) { // 此方法是进入Servlet方法(也就是具体的业务) filterChain.doFilter(request, response); } else { // 此方法是调用其它 filter 的 doFilter() 方法 doFilterInternal(httpRequest, httpResponse, filterChain); } }