【问题标题】:Startup a Servlet before loading app context在加载应用上下文之前启动一个 Servlet
【发布时间】:2010-11-08 11:45:54
【问题描述】:

我有一个 servlet,它作为我的应用程序的一部分捆绑在一起。我希望能够配置 Tomcat 或 Spring 在应用程序上下文最终初始化之前在 boostrap 加载这个 servlet。

我这样做是因为 - 在实际上下文被触发之前,我正在使用 servlet 进行一些初始环境检查和文件加载。

有人知道这样做有什么好处吗?

我已经添加了这样的 servlet 定义;

    <servlet> 
            <servlet-name>init-class</servlet-name>
            <servlet-class>package.initClass</servlet-class>
            <load-on-startup>0</load-on-startup> 
    </servlet>

只有在应用上下文完成加载后才会触发。

【问题讨论】:

  • 你指的是哪个appcontext?另一个 servlet?
  • 我指的是 Spring 应用程序上下文,它包含我所有的 bean 接线。
  • 你需要在那里做什么?什么没有被触发 - servlet 的 init() 方法..?
  • 这个 appcontext 是如何连接的?使用DispatcherServletContextLoaderListener?
  • 一切正常!我的问题是他们被解雇的顺序。我希望我的 initClass.java 在 spring 上下文被触发之前首先被触发以执行一些基本的文件加载和环境检查。

标签: java spring tomcat servlets


【解决方案1】:

您需要将此初始化逻辑放入ServletContextListener而不是servlet,并在web.xml中声明为

<listener><listener-class>YourListenerClass</listener-class></listener>

另外,如果你的 Spring 上下文是由 ContextLoaderListener 加载的,你的监听器应该在 web.xml 之前声明,因为监听器是按声明顺序触发的。

【讨论】:

  • 有没有办法在上下文初始化之前运行代码? ServletContextListener 有 2 个方法。在上下文被初始化后运行的 contextInitialized 方法和在上下文被销毁后运行的 contextDestroyed 方法。我想要一个在初始化上下文参数之后和 Spring 侦听器启动之前运行的方法。
【解决方案2】:

也许Listner 就是您要找的东西

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2019-09-24
    • 2015-11-27
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多