`
xiaofengtoo
  • 浏览: 491869 次
  • 性别: Icon_minigender_1
  • 来自: xiamen
社区版块
存档分类
最新评论

listener、filter、servlet、beans执行顺序如何

    博客分类:
  • IT
阅读更多

在典型的J2EE里面

可以肯定的是,加载顺序与他们在web.xml 文件中的先后顺序无关。
web.xml中的加载顺序为:listener >> filter >> servlet >> spring 其中filter的执行顺序是filter- mapping 在web.xml中出现的先后顺序。

加载顺序会影响对spring bean的调用。比如filter 需要用到bean ,但是加载顺序是先加载filter 后加载spring,则filter中初始化操作中的bean为null。所以,如果过滤器中要使用到 bean,可以将spring 的加载改成Listener的方式。如下所示(灰色部分为可选):

 <context-param> 
        <param-name>contextConfigLocation</param-name> 
        <param-value>classpath*:spring*.xml</param-value> 
    </context-param> 
	<listener>
	    <listener-class>org.springframework.web.context.ContextLoaderServlet</listener-class>
	  </listener>

 在<param-value> </param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并用“,”号分隔。上面的applicationContext-*.xml采用通配符,
比如这那个目录下有applicationContext-ibatis-base.xml,applicationContext-action.xml,applicationContext-ibatis-dao.xml等文件,都会一同被载入。

 

另:如果需要在Listener 中调用了sping的bean,可是由于执行顺序的原因,很是苦恼

参考:技术积累池

 

import java.util.Timer;  
import javax.servlet.ServletContext; 
import javax.servlet.ServletContextEvent;  
import javax.servlet.ServletContextListener;  
import org.springframework.web.context.WebApplicationContext;  
import org.springframework.web.context.support.WebApplicationContextUtils;  

/** 
 * 任务监听器 
 *  
 * @author 忧里修斯 
 * 
 */  
public class TaskListener implements ServletContextListener {  
    public void contextDestroyed(ServletContextEvent context) {  
    }  
    public void contextInitialized(ServletContextEvent context) {  
       ServletContext servletContext = context.getServletContext();  
        WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);  
       SheduleTask sheduleTask = (SheduleTask) wac.getBean("sheduleTask");  
        Timer timer = new Timer();  
        //每隔30分钟执行一次  
//      timer.schedule(new SheduleTask(), 0,1000*60*30);  
        timer.schedule(sheduleTask, 0,1000*60*30);  
    }  
}  

 可是老是出现:

No WebApplicationContext found: no ContextLoaderListener registered?

 

参考了:关于web.xml中listener的执行顺序问题

 

思路就是,既然listener的顺序是不固定的,那么我们可以整合两个listener到一个类中,这样就可以让初始化的顺序固定了。我就是重写了org.springframework.web.context.ContextLoaderListener这个类

 

解决方法是:

 

public class Listener  extends ContextLoaderListener  implements ServletContextListener {
     public void contextInitialized(ServletContextEvent event) {
        super.contextInitialized(event);
        //TODO 写你的操作
   }
  public void contextDestroyed(ServletContextEvent event) {	
            //TODO 写你的操作		
		super.contextDestroyed(event);

	}
}
 

然后在web.xml中配置

 

<listener>
	    <listener-class>com.Listener</listener-class>
</listener>
 

 

分享到:
评论
1 楼 francis.xjl 2012-12-03  
这个做法,不错! 但感觉还是有点别扭,不知道有没有更好的方法。

相关推荐

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

    本文将详细介绍web.xml中的Servlet、Bean、Filter、Listener加载顺序,并探讨其内部执行顺序。 首先,我们需要了解web.xml文件的基本结构。web.xml文件主要包含了四个部分:Servlet、Bean、Filter、Listener。其中...

    J2EE&Servlet API 帮助文档

    7. **Listener**:Servlet 2.5支持事件监听器,如HttpSessionListener、ServletRequestListener和ServletContextListener,它们可以在特定事件(如session创建或销毁)发生时执行操作。 **J2EE API** J2EE API不仅...

    jsp+servlet模板

    4. **Filter**:过滤器用于在请求处理前后执行特定的操作,如登录验证、GZIP压缩等。 5. **Listener**:监听器可以监听Web应用中特定事件,如会话创建、销毁等,以便进行相应处理。 总之,“jsp+servlet模板”为Web...

    Servlet3 学习测试代码

    和Servlet一样,Servlet3也支持使用注解来声明过滤器(@WebFilter)和监听器(@WebListener),这样可以避免在web.xml中硬编码这些组件。 5. **预加载和动态注册**: Servlet3允许容器在应用启动时自动发现并加载带有...

    企业级servlet 和J2EE.rar

    在实际应用中,Servlet通常与JSP、Filter和Listener等组件一起使用,形成Web应用的基础架构。Filter可以拦截请求和响应,进行预处理或后处理,而Listener则可以监听特定的事件,例如用户会话的开始和结束。 在企业...

    J2EE技术面试题 EJB面试题 JDBC面试题 JSP面试题 Servlet面试题

    - 什么是Filter和Listener,它们在Servlet中的应用场景是什么? - HTTP请求方法GET和POST的区别,以及它们在Servlet中的处理。 掌握这些知识点不仅能够帮助你在面试中脱颖而出,也是成为一名优秀J2EE开发者的基础...

    java面试题(包括ejb,hibernate,java,jsp,servlet,js等)

    - Filter和Listener的概念,以及如何配置和使用它们。 - Servlet 3.0的新特性,如注解配置和异步处理。 6. **JavaScript** JavaScript主要负责前端交互,面试题可能包括: - DOM操作:增删改查元素,事件处理等...

    ssh中struts2,spring,各配置说明

    &lt;servlet-class&gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;action&lt;/servlet-name&gt; *.do &lt;/servlet-mapping&gt; ``` 2....

    java中SSH框架主要说明SSH各部分的作用

    ActionForm是用于封装请求参数的类,而Action则是执行特定业务逻辑的类。推荐使用Struts的DispatchAction,因为它可以减少Spring配置中的工作量,提高代码的可维护性。 其次,Hibernate是一个强大的对象关系映射...

    通过CXF开发webService接口(soap协议、maven项目).pdf

    最后,我们需要在服务器上部署这个Web应用,服务器会加载`web.xml`并执行配置中的步骤,使CXF能够处理来自客户端的SOAP请求。 总结来说,通过CXF开发基于SOAP协议的Web Service接口,需要以下几个步骤: 1. 添加CXF...

    javaSSH框架搭建配置

    &lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt; &lt;param-name&gt;encoding &lt;param-value&gt;utf-8 &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;...

    j2ee考试+答案

    1. **Web组件**:包括Servlet、JSP(JavaServer Pages)、Filter和Listener。Servlet是Java编写的服务器端程序,处理HTTP请求;JSP则将动态内容与HTML模板结合;Filter可以对请求和响应进行拦截处理;Listener则监听...

    javaWEB2

    6. **Filter和Listener**:Filter用于在请求到达Servlet之前进行预处理,或者在响应返回给客户端之后进行后处理。Listener则是监听特定事件的发生,如session创建、销毁、请求初始化等,可用于实现一些高级功能,如...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    15.2.3 [listener]元素 457 15.2.4 [tag]元素 458 15.2.5 [tag-file]元素 460 15.2.6 [function]元素 461 15.3 传统标签的开发 462 15.3.1 实例一:[hello]标签 462 15.3.2 实例二:[max]标签 465 15.3.3 ...

    Spring+mybatis

    &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;school&lt;/servlet-name&gt; &lt;url-pattern&gt;/ &lt;/servlet-mapping&gt; ``` - 配置...

    J2EE专业项目实例开发

    Filter和Listener是Servlet API的重要组成部分,它们提供拦截请求和监听事件的能力。Filter可以用来进行权限控制、内容编码等,Listener则用于响应特定的Servlet容器事件。 7. **JMS(Java Message Service)** ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    15.2.3 [listener]元素 457 15.2.4 [tag]元素 458 15.2.5 [tag-file]元素 460 15.2.6 [function]元素 461 15.3 传统标签的开发 462 15.3.1 实例一:[hello]标签 462 15.3.2 实例二:[max]标签 465 15.3.3 ...

    JAVAEE-期末卷-选择填空-已整理.doc

    6. **Listener**:Listener是Servlet的事件驱动机制,它们监听特定的事件(如会话创建、销毁等),并在事件发生时执行相应的操作。 7. **JSP脚本元素**:JSP页面中的脚本元素允许开发者嵌入Java代码,以实现动态...

    J2EE开源编程精要15讲 源代码(全部)

    8. **Java Servlet Filter 和 Listener**:Filter用于拦截请求和响应,而Listener监听应用事件。源代码可能展示了如何自定义Filter和Listener,以及它们在处理流程中的作用。 9. **JNDI(Java Naming and Directory...

Global site tag (gtag.js) - Google Analytics