`
tianhei
  • 浏览: 210386 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Listener、Filter、Servlet 初始化顺序

阅读更多

Listener、Filter、Servlet都有一个初始化的过程,对应的方法分别为:

contextInitialized(ServletContextEvent arg0)

init(FilterConfig filterConfig)

init(ServletConfig config)

 

那么它们的初始化顺序是什么呢?

Listener > Filter > Servlet

 

TestServlet.java

package com.cos;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class TestServlet extends GenericServlet {
    @Override
    public void init(ServletConfig config){
        System.out.println("Servlet 初始化 。。。");
    }
    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
        System.out.println("Servlet service 。。。");
    }
}

 

TestFilter.java

package com.cos;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class TestFilter implements Filter{
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("Filter 初始化。。。");
    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("doFilter 。。。");
        chain.doFilter(request, response);
    }
    public void destroy() {
        System.out.println("Filter 销毁。。。");
    }
}

 

TestListener.java

package com.cos;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class TestListener implements ServletContextListener{
    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("Listener 初始化。。。");
    }
    public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("Listener 销毁。。。");
    }
}

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>s</servlet-name>
        <servlet-class>com.cos.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>s</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>f</filter-name>
        <filter-class>com.cos.TestFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>f</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <listener>
        <listener-class>com.cos.TestListener</listener-class>
    </listener>
</web-app>

 

启动tomcat后,在控制台里以此打印出:

Listener 初始化。。。

Filter 初始化。。。

信息: Server startup in 675 ms

 

可以看出Listener的初始化最早,Filter次之。他俩的初始化都是在容器启动完成之前初始化的。

Servlet没有初始化,原因是没有匹配的请求进来。

如果想要servlet自动初始化,需要在指定的servlet中配置<load-on-startup>参数,没有此标签,默认启动时servlet不进行初始化。

 

初始化的顺序跟Listener、Filter、Servlet在web.xml中的顺序无关

而多个Filter或多个Servlet的时候,谁的mapping在前面,谁先初始化。

 

如果web.xml中配置了<context-param>,初始化顺序:

context-param > Listener > Filter > Servlet

 

 

 

19
5
分享到:
评论
5 楼 xhalg 2011-03-28  
不错 ,可以按照思路把所有的组件的加载顺序实验一下,嘿嘿!
4 楼 lyw985 2011-03-25  
GOOD!
3 楼 jzinfo 2011-03-23  
okay

楼主是不是我托梦给你了啊

我刚好也自己研究了这个 也写了个类似的程序验证了  呵呵

你写了 我就不多此一举
2 楼 tianhei 2011-03-23  
是的。servlet也可以自动初始化,前提是配置<load-on-startup>参数
已补充,谢谢楼上提醒
1 楼 struts 2011-03-22  
servlet也支持启动初始化。

相关推荐

    web.xml 中的listener、 filter、servlet 加载顺序及其详解.doc

    我们的 listener, filter 等在初始化时会用到这些上下文中的信息,因此 context-param 配置节的加载顺序非常重要。 实际上,web.xml 文件的加载顺序是:context-param -&gt; listener -&gt; filter -&gt; servlet。这意味着...

    Listener、Filter、Servlet与Java Web项目初始化项目例子 源代码

    通常JavaWeb项目启动时我们需要... 下面代码是模拟初始化的一个示例,可以在控制台看到程序的输出,和Listener、Filter、Servlet的启动先后顺序,强烈建议跟我一样喜欢动手的Coder操作一下,废话不多说,直接上代码了。

    servlet+filter+listener 详解

    + ServletConfig :定义了在 Servlet 初始化的过程中由 Servlet 容器传递给 Servlet 的配置信息对象。 + ServletContext :定义 Servlet 使用的方法以获取其容器的信息 + ServletRequest :定义一个对象封装客户...

    web.xml文件中配置(servlet, spring, filter, listenr)的加载顺序

    在Java Web应用开发中,`web.xml`文件是整个Web应用程序的核心配置文件之一,它定义了Servlet容器如何启动、初始化以及配置各个组件如servlet、filter、listener等。了解这些组件之间的加载顺序对于正确配置和优化...

    web.xmllistener、filter、servlet加载顺序.pdf

    监听器是实现特定`java.util.EventListener`接口的类,它们可以监听应用程序中的特定事件,如会话创建、销毁、请求初始化等。在`web.xml`中,监听器通过`&lt;listener&gt;`标签定义。它们是最早被加载的组件,因为它们...

    Servlet、Filter、Listener深入理解.docx

    1. `init(FilterConfig config)`: 初始化Filter,与Servlet的`init()`类似。 2. `doFilter(ServletRequest request, ServletResponse response, FilterChain chain)`: 过滤链的核心方法,处理请求和响应。`...

    servlet_filter_listener

    Servlet生命周期包括初始化、服务、销毁三个阶段,开发者可以通过重写`init()`、`service()`和`destroy()`方法进行定制化处理。 接着,我们来看`Filter`。Filter是Java Servlet规范中的一个重要组成部分,允许...

    Spring 管理filter 和servlet

    在`web.xml`中,使用`ContextLoaderListener`来初始化Spring的WebApplicationContext,确保在Filter执行之前Spring的上下文已经被加载。配置如下: ```xml &lt;param-name&gt;contextConfigLocation &lt;param-value&gt;/...

    web服务器三大组件servlet、Filter、Listener——浅浅笔记

    Web服务器中的三大组件,即Servlet、Filter和Listener,是构建动态Web应用程序的关键元素。这些组件都是基于Java的,主要用于增强和扩展Web服务器的功能。 Servlet是Java中用于处理HTTP请求的核心组件,它是动态...

    Servlet中的Filter

    按照配置顺序,先执行Listener,然后是Filter,接着是Struts拦截器,最后是Servlet。 - Filter的执行顺序取决于它们在web.xml中的配置顺序。每个Filter的doFilter()方法会被调用,直到请求达到Servlet,或者在...

    Filter和Listener

    - **执行顺序**:Filter的执行遵循配置顺序,而Listener的执行依赖于事件的发生顺序。 - **应用场景**:Filter更适合用于处理请求的前置和后置操作,如权限检查、编码转换等;而Listener适用于监听和响应Web应用的...

    web.xml中servlet, bean, filter, listenr 加载顺序_动力节点Java学院整理

    例如,如果Filter中需要使用到Bean,但是加载顺序是先加载Filter后加载Bean,则Filter中初始化操作中的Bean将为null。 通过对web.xml文件的分析,我们可以得出结论:Listener的加载顺序在最前面,接着是Filter,...

    web.xml文件配置.doc

    servlet的配置与filter类似,servlet的初始化顺序和映射URL的处理顺序也是根据servlet和servlet-mapping在文件中的顺序来确定的。 web.xml文件中的主要元素如下: 1. `&lt;web-app&gt;`:这是web.xml的根元素,包含所有...

    特殊情况(ActionForm,Servlet, Filter, Listener)下Spring如何注入对象

    3. **Listener**: 在监听器的初始化方法(如contextInitialized())中,可以获取ApplicationContext并注入所需的bean。 对于SSH整合,Spring还提供了Struts的Spring插件,它可以自动将ActionForm转换为Spring管理的...

    杂记(一):Listener、Filter和工具

    而ServletContextListener则是在应用启动和关闭时执行初始化和清理工作,如加载配置信息或注册全局对象。 Filter(过滤器)则是Java Web开发中的另一个核心组件,它允许我们在请求处理前后对数据进行拦截和修改。...

    Servlet中文api帮助文档

    4. `ServletConfig`:在Servlet初始化时由容器提供,包含关于Servlet的配置信息。 5. `ServletRequest`:代表客户端的请求,提供获取请求参数和头信息的方法。 6. `ServletResponse`:用于向客户端发送响应,可以...

    Java+Servlet+Api

    8. **Listener**:Servlet 2.3引入了各种监听器接口,如ServletRequestListener、ServletRequestAttributeListener、HttpSessionListener等,可以在特定事件发生时执行代码,如Servlet初始化、请求属性改变、会话...

    servlet API zip压缩包

    监听器是Servlet API中的一种重要组件,可以监听特定事件,比如Session的创建、销毁,Context的初始化、销毁,或者特定Servlet的初始化和销毁等。通过实现不同的接口,开发者可以在事件发生时执行相应的代码。 七、...

    servlet-api 源码

    - Listener接口如ServletContextListener、ServletRequestListener等,可以在特定事件(如Web应用启动、Servlet初始化)发生时执行代码。 八、多线程与线程安全 Servlet API默认为每个请求创建一个新的线程,因此...

    servlet基础与servlet容器模型

    7. **监听器**(Listener):监听Web应用中特定事件,如会话创建、销毁、上下文初始化等,可执行相应操作。 Servlet容器模型的另一个关键特性是多线程模型。由于HTTP请求是无状态的,Servlet容器通常为每个请求创建...

Global site tag (gtag.js) - Google Analytics