专栏首页earthchen的专栏servlet与filter的加载顺序

servlet与filter的加载顺序

servlet与filter的加载顺序

加载顺序

提到加载顺序,首先我们需要对sevlet中的load-on-startup单独讨论

基本有以下几点:

  • load-on-startup 元素标记容器是否应该在web应用程序启动的时候就加载这个servlet,(实例化并调用其init()方法)。
  • 它的值必须是一个整数,表示servlet被加载的先后顺序。
  • 如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。
  • 如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。

在servlet没加load-on-startup属性的情况下

  • 初始化只执行filter的init()方法,不执行servlet的init()的方法。请求/hello时,执行最后一个servlet的init()方法,再按顺序执行filter。最后执行最后一个servlet的方法。
  • filter执行循序看的。servlet执行顺序看的。

当servlet中添加了load-on-startup的情况

  • 容器初始化时,先初始化所有filter的init()方法。再初始化所有servlet的init()方法。且servlet的init()方法根据load-on-startup值决定执行顺序,值越小,越先执行。在请求/hello时,不再执行init()方法。执行循序同1.

总结

  • filter的init方法在容器初始化时加载。第一次加载容器执行顺序随机,以后再次加载顺序以第一次加载顺序为准。
  • filter的doFilter方法在请求url时执行,如果有多个filter匹配,则按照顺序执行(前提是doFilter方法里面最后要调用FilterChain的doFilter方法,这个方法作用是继续执行下个filter,如果没有加,则不执行下面的filter)
  • 如果web.xml中配置了属性,则在Tomcat初始化时按其值从小到大的顺序加载所有servlet的init方法。
  • 如果没有配置属性,容器初始化时不加载。在请求匹配的url时进行加载,并且只加载最后一个servlet的init方法。其他的servlet不加载。
  • servlet的doGet、doPost方法:在请求匹配的url路径时加载,而且只加载最后一个servlet的方法,其他方法不加载
  • 如果请求的url既匹配filter又匹配servlet,并且servlet的init方法没有在容器初始化加载,则先加载匹配的servlet的最后一个servlet的init方法,再按顺序执行filter方法,最后再执行匹配的最后一个servlet方法。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JAVA基础(三) web.xml 中的listener、 filter、servlet 加载顺序及其详解

    JAVA基础(三) web.xml 中的listener、 filter、servlet 加载...

    Java架构师必看
  • 详解web.xml中元素的加载顺序

      最近在项目中遇到了启动时出现加载service注解注入失败的问题,后来经过不懈努力发现了是因为web.xml配置文件中的元素加载顺序导致的,那么就抽空研究了...

    阿豪聊干货
  • servlet/filter/listener/interceptor区别与联系

    1、servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户...

    会说话的丶猫
  • spring boot 如何统一处理 Filter、Servlet 中的异常信息

    可以使用过滤器对请求进行预处理,预处理完毕之后,再执行 chain.doFilter() 将程序放行。

    create17
  • Java Servlet工作原理问答

    本文来自stackoverflow的问答,讨论了Java Servlet的工作机制,如何进行实例化、共享变量和多线程处理。

    哲洛不闹
  • web.xml 组件加载顺序

    在配置项目组件的过程中, 了解Tomcat加载组件顺序很有必要。 例如某些框架如Quartz的集群功能需要数据库的支持, 数据库的加载肯定要在框架组件加载之前。

    用户1257393
  • web.xml 组件加载顺序

    在配置项目组件的过程中, 了解Tomcat加载组件顺序很有必要。 例如某些框架如Quartz的集群功能需要数据库的支持, 数据库的加载肯定要在框架组件加载之前。

    用户1257393
  • servlet/filter/listener/interceptor区别与联系

    由于最近两个月工作比较清闲,个人也比较“上进”,利用工作空余时间,也继续学习了一下,某天突然想起struts2和struts1的区别的时 候,发现 为什么st...

    哲洛不闹
  • servlet/filter/listener/interceptor区别与联系

    由于最近两个月工作比较清闲,个人也比较“上进”,利用工作空余时间,也继续学习了一下,某天突然想起struts2和struts1的区别的时 候,发现 为什么st...

    哲洛不闹
  • JavaWeb中web.xml初始化加载顺序

    需求说明 做项目时,为了省事,起初把初始化的配置都放在每个类中 static加载,初始化配置一多,就想把它给整理一下,这里使用servlet中的init方法初始...

    小柒2012
  • Java 中的 Filter 过滤器详解

    Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Serv...

    Java团长
  • java开发之Java 的 Filter 过滤器学习

    Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Serv...

    用户1289394
  • 干货,一文带你超详细了解 Filter 的原理及应用

    1) Filter(过滤器) 的基本功能是对 Servlet 容器调用 Servlet (JSP)的过程进行拦截, 从而在 Servlet 处理请求前和Serv...

    java架构师
  • SpringBoot中过滤器的使用

    Filter 过滤器这个概念应该大家不会陌生,特别是对与从 Servlet 开始入门学 Java 后台的同学来说。那么这个东西我们能做什么呢?Filter 过滤...

    一只胡说八道的猴子
  • 【小家Spring】Spring环境中(含Boot环境),web组件(Servlet、Filter)内注入使用Spring容器里的Bean

    在日常web开发中,我们经常会使用到Filter,这个组件最经典的使用场景就是鉴权。比如现在的JWT鉴权模式,所有的请求都应该携带一个Token,然后我们在Fi...

    YourBatman
  • Spring Boot使用嵌入式容器,那怎么配置自定义Filter呢

    Listener、Filter和Servlet是Java Web开发过程中常用的三个组件,其中Filter组件的使用频率最高,经常被用来做简单的权限处理、请求头...

    Java_老男孩
  • jsp、servlet笔记

    1、init    初始化Jsp&Servlet方法    destroy 销毁Jsp&Servlet之前的方法    service 对用户请求生成响应的方法...

    用户1141560
  • (一)Servlet 工作原理解析 -- 第一讲 Servlet 容器

    阿凯
  • Servlet3.0 模块化

    前言:原本一个web应用的任何配置都需要在web.xml中进行,因此会使得web.xml变得很混乱,而且灵活性差,因此Servlet 3.0可以将每个Servl...

    王念博客

扫码关注云+社区

领取腾讯云代金券