代码之家  ›  专栏  ›  技术社区  ›  martsraits

servlet.init()和filter.init()调用序列

  •  31
  • martsraits  · 技术社区  · 16 年前

    在JavaWeb应用程序中调用Servlet、Inter()和Field.In()方法的顺序是什么?先叫哪个?是否所有servlet.init()方法都是在任何filter.dofilter方法之前调用的?

    4 回复  |  直到 9 年前
        1
  •  27
  •   Rohit Gaikwad konda    9 年前

    在webapp启动期间,过滤器始终按照在中定义的顺序初始化。 web.xml .

    默认情况下,servlet仅在其URL模式上的第一个HTTP请求期间初始化。但您也可以使用 <load-on-startup> 可以指定优先级的条目。然后按优先级顺序加载它们。
    例如。

    <servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>mypackage.MyServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    

    如果有更多具有相同优先级顺序的servlet,那么这些servlet的加载顺序是未指定的,可能是任意的。但是servlet是以任何方式初始化的 之后 过滤器的初始化,但是 之前 调用筛选器。

        2
  •  7
  •   Tendayi Mawushe    16 年前
    1. 对于所有筛选器: Filter.init()
    2. 对于在中具有“”的所有servlet web.xml : Servlet.init()
    3. 对于所有适用的请求过滤器: Filter.doFilter()
    4. 如果适用,servlet尚未初始化: servlet .In()
    5. 适用的servlet: Servlet.service()
        3
  •  6
  •   Jan Gutvirth    13 年前

    只是一个旁注——我在Tomcat(7.0.30)上体验到filter.init()方法是随机运行的(通过hashmap迭代)。

        4
  •  -1
  •   mkhludnev    9 年前

    当心。我已经看到在同一个实例上同时调用filter.init()和filter.dofilter()。我还是很震惊,无法恢复。它的名字叫杰蒂。