J2EE基础知识-filter与servlet

参考文章:servlet 和 filter执行顺序

 

Filter

Servlet

接口

实现Filter接口

实现Servlet接口

使用步骤

1、创建类,继承接口

2、实现方法

init()、doFilter()、destroy()

3、配置WEB-INF/web.xml

1、创建类,继承接口

2、实现方法

init()、ervice()、destroy()、getServletConfig()、getServletInfo()

3、配置WEB-INF/web.xml

初始化时间

Servlet容器启动之后即初始化

Servlet类被调用之后初始化、先于Filter调用。

初始化可以在容器启动后被调用但需要配置。

调用顺序

1. 按照web.xml中的映射配置顺序按照配置条件从后向前调用

2. 通过调用doFilter()中的doFilterInternal()依次调用其它filterdoFilter()方法,直至调用到 FilterChain.doFilter()
(依次调用的方式,相当于递归调用)

3. 进入FilterChain.doFilter(),就是调用Servlet中的 service()

4. service() 执行完毕后,层次调用doFilter()FilterChain.doFilter()之后的方法,顺序与之前的相反

  1.按照web.xml中的映射配置顺序按照配置条件从后向前调用第一个满足条件的Servlet

2.调用之前事先执行满足条件的Filter,不存在层次调用Servlet问题

销毁

服务器停止后销毁,晚于Servlet销毁之后

服务器停止后销毁

作用

1. 在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest

2. 根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。

3. 在HttpServletResponse到达客户端之前,拦截HttpServletResponse

4. 根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

主要是处理客户端的请求并将其结果发送到客户端。

注:

  1.  Servlet是先于Filter创建,先于Filter销毁,但晚于 Filter 调用。
  2. OncePerRequestFilter记住这个类,此类是许多功能Filter的父类,其 doFilter() 值得打断点,看内容。(spring、shiro 都有相同名称的类,而且功能相近)
  3. 注意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); } }

     


__EOF__

本文作者之士咖啡
本文链接https://www.cnblogs.com/zz-1q/p/16412619.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   之士咖啡  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示