在典型的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>
分享到:
相关推荐
本文将详细介绍web.xml中的Servlet、Bean、Filter、Listener加载顺序,并探讨其内部执行顺序。 首先,我们需要了解web.xml文件的基本结构。web.xml文件主要包含了四个部分:Servlet、Bean、Filter、Listener。其中...
7. **Listener**:Servlet 2.5支持事件监听器,如HttpSessionListener、ServletRequestListener和ServletContextListener,它们可以在特定事件(如session创建或销毁)发生时执行操作。 **J2EE API** J2EE API不仅...
4. **Filter**:过滤器用于在请求处理前后执行特定的操作,如登录验证、GZIP压缩等。 5. **Listener**:监听器可以监听Web应用中特定事件,如会话创建、销毁等,以便进行相应处理。 总之,“jsp+servlet模板”为Web...
和Servlet一样,Servlet3也支持使用注解来声明过滤器(@WebFilter)和监听器(@WebListener),这样可以避免在web.xml中硬编码这些组件。 5. **预加载和动态注册**: Servlet3允许容器在应用启动时自动发现并加载带有...
在实际应用中,Servlet通常与JSP、Filter和Listener等组件一起使用,形成Web应用的基础架构。Filter可以拦截请求和响应,进行预处理或后处理,而Listener则可以监听特定的事件,例如用户会话的开始和结束。 在企业...
- 什么是Filter和Listener,它们在Servlet中的应用场景是什么? - HTTP请求方法GET和POST的区别,以及它们在Servlet中的处理。 掌握这些知识点不仅能够帮助你在面试中脱颖而出,也是成为一名优秀J2EE开发者的基础...
- Filter和Listener的概念,以及如何配置和使用它们。 - Servlet 3.0的新特性,如注解配置和异步处理。 6. **JavaScript** JavaScript主要负责前端交互,面试题可能包括: - DOM操作:增删改查元素,事件处理等...
<servlet-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</servlet-class> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> *.do </servlet-mapping> ``` 2....
ActionForm是用于封装请求参数的类,而Action则是执行特定业务逻辑的类。推荐使用Struts的DispatchAction,因为它可以减少Spring配置中的工作量,提高代码的可维护性。 其次,Hibernate是一个强大的对象关系映射...
最后,我们需要在服务器上部署这个Web应用,服务器会加载`web.xml`并执行配置中的步骤,使CXF能够处理来自客户端的SOAP请求。 总结来说,通过CXF开发基于SOAP协议的Web Service接口,需要以下几个步骤: 1. 添加CXF...
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <param-name>encoding <param-value>utf-8 </filter> <filter-mapping> <filter-name>...
1. **Web组件**:包括Servlet、JSP(JavaServer Pages)、Filter和Listener。Servlet是Java编写的服务器端程序,处理HTTP请求;JSP则将动态内容与HTML模板结合;Filter可以对请求和响应进行拦截处理;Listener则监听...
6. **Filter和Listener**:Filter用于在请求到达Servlet之前进行预处理,或者在响应返回给客户端之后进行后处理。Listener则是监听特定事件的发生,如session创建、销毁、请求初始化等,可用于实现一些高级功能,如...
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 ...
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>school</servlet-name> <url-pattern>/ </servlet-mapping> ``` - 配置...
Filter和Listener是Servlet API的重要组成部分,它们提供拦截请求和监听事件的能力。Filter可以用来进行权限控制、内容编码等,Listener则用于响应特定的Servlet容器事件。 7. **JMS(Java Message Service)** ...
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 ...
6. **Listener**:Listener是Servlet的事件驱动机制,它们监听特定的事件(如会话创建、销毁等),并在事件发生时执行相应的操作。 7. **JSP脚本元素**:JSP页面中的脚本元素允许开发者嵌入Java代码,以实现动态...
8. **Java Servlet Filter 和 Listener**:Filter用于拦截请求和响应,而Listener监听应用事件。源代码可能展示了如何自定义Filter和Listener,以及它们在处理流程中的作用。 9. **JNDI(Java Naming and Directory...