`
tianhei
  • 浏览: 207899 次
  • 性别: 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也支持启动初始化。

相关推荐

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

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

    Java™ Servlet 规范.

    2.3.2 初始化 ............................................................................................................................................16 2.3.3 请求处理 ................................

    Web.xml的作用及常用标签的功能

    web.xml文件是用来初始化工程配置信息的,比如说welcome页面,filter,listener,servlet,servlet-mapping,启动加载级别等等,当你的web工程中没用到这些当然也就不需要这个xml文件来配置你的apllication了 ...

    spring mvc项目

    可用于分析spring mvc源码、spring mvc父子容器初始化流程、session和cookie机制、spring session等,也可以用于学习Java Web(servlet、filter、listener等)、spring源码等。 该项目使用servlet3.0规范,无web.xml...

    Servlet3.1规范(最终版) PDF

    16 2.3.1 加载和实例化 ................................................................................................................................16 2.3.2 初始化 ....................................

    ssh(structs,spring,hibernate)框架中的上传下载

     我们前面已经指出Oracle的Lob字段和一般类型的字段在操作上有一个明显的区别--那就是你必须首先通过Oracle的empty_blob()/empty_clob()初始化Lob字段,然后获取该字段的引用,通过这个引用更改其值。所以要完成对...

    Java优化编程(第2版)

    7.2.4 filter servlet与listener servlet 小结 第8章 开发高性能的ejb应用 8.1 采用ejb技术的必要性 8.1.1 ejb技术的优势特性 8.1.2 ejb技术体系具有清晰的架构层次 8.1.3 ejb与传统bean相比的性能优势 8.2 ejb的...

    java8源码-LearnSpring:学习springboot

    java8 源码 Learn Spring Bean 注解 Target 关联注解 所在模块 所在包 ...事务(Transactional) ...注解就相当于在业务开发中的功能需求,重点是理解加上注解之后程序如何将注解的作用发挥出来的...容器初始化的工作。 sprin

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    2.3 Bean 的初始化和销毁 37 2.3.1 点睛 37 2.3.2 演示 38 2.4 Profile 40 2.4.1 点睛 40 2.4.2 演示 41 2.5 事件(Application Event) 44 2.5.1 点睛 44 2.5.2 示例 44 第3 章 Spring 高级话题 48 3.1 Spring ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    2.3 Bean 的初始化和销毁 37 2.3.1 点睛 37 2.3.2 演示 38 2.4 Profile 40 2.4.1 点睛 40 2.4.2 演示 41 2.5 事件(Application Event) 44 2.5.1 点睛 44 2.5.2 示例 44 第3 章 Spring 高级话题 48 3.1 Spring ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    2.3 Bean 的初始化和销毁 37 2.3.1 点睛 37 2.3.2 演示 38 2.4 Profile 40 2.4.1 点睛 40 2.4.2 演示 41 2.5 事件(Application Event) 44 2.5.1 点睛 44 2.5.2 示例 44 第3 章 Spring 高级话题 48 3.1 Spring ...

Global site tag (gtag.js) - Google Analytics