对于Web应用程序,我使用JSF 1.2和Facelets。
问题是我们现在通过单例模式进行初始化,并且需要 5-15秒因为它读入数据文件(我们没有使用数据库)。当第一个用户浏览到相应的网页时会发生这种情况(第二个用户没有此延迟)。
我希望在部署之后立即初始化此单例。我怎样才能做到这一点?我试图添加一个应用程序bean,但它没有被调用。我还尝试添加一个servlet如下:
<servlet>
<description>MyApplicationContextListener Servlet</description>
<display-name>MyApplicationContextListener Servlet</display-name>
<servlet-name>MyApplicationContextListener</servlet-name>
<servlet-class>mydomain.beans.MyApplicationContextListener</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<listener>
<listener-class>mydomain.beans.MyApplicationContextListener</listener-class>
</listener>
使用以下代码:
package mydomain.beans;
import javax.servlet.ServletContextEvent;
public class MyApplicationContextListener {
public void contextInitialized(ServletContextEvent event) {
System.out.println("MyApplicationContextListener.contextInitialized started");
}
public void contextDestroyed(ServletContextEvent event) {
System.out.println("MyApplicationContextListener.contextInitialized stopped");
}
}
包含web.xml和/或faces-config.xml中所需更改的示例将很不错!
答案 0 :(得分:1)
如何使用ServletContextListener
?在初始化上下文时将调用其contextInitialized(..)
方法。它映射在web.xml
中,如下所示:
<listener>
<listener-class>com.example.MyServletContextListener</listener-class>
</listener>
另外,(不确定这会起作用),你可以配置你的faces-servlet在启动时加载。:
<load-on-startup>1</load-on-startup>
澄清:对于侦听器方法,您的侦听器必须实现ServletContextListener
:
public class MyServletContextListener implements ServletContextListener { .. }