2013-01-16 30 views

回答

4

在启动应用程序时加载数据是一项常见任务,您可以在网上找到几个示例。正如在其他答案中所说的,你应该实现一个ServletContextListener(这不是Struts2特有的)......你可以read a great example here

这里最重要的是理解概念的行动:

在​​(模型 - 视图 - 控制器)框架,一个ActionController(和Model的一部分)。

Action s被来自ClientRequest s调用(并且每个请求都创建一个Action,因此它们是线程安全的)。

这意味着你需要一个客户端,通常是意味着一个人在PC前,点击浏览器......然后,客户端调用不是执行自动的服务器端操作的正确触发器在共享对象上。

当然,你可以实现某种形式的lazy-initialitazion(例如。在一个自定义的拦截器的帮助下),以便第一个用户在Application范围内设置一些东西,其他用户将检索已经填充的对象,但这不是最好的方法(你应该处理并发在初始阶段,你将有一个用户,第一个等待服务器在启动当晚可能完成的操作......)。

2

编写一个ServletContextListener,这将只在每个Web应用程序中可用,并且在应用程序部署时将被安装。

这里是在Servlet和JSP启动时post

1

负载存在如下

你可以问问网页服务器启动时加载。这是通过web.xml文件完成的

<servlet> 
<servlet-name>login</servlet-name> 
<jsp-file>/login.jsp</jsp-file> 
<load-on-startup>1</load-on-startup> 
</servlet> 

正常情况下,jsp文件在第一次打击时编译。 现在的代码说预编译一个jsp文件,而不用等待第一个命中。

For struts2 you can change programatically in web.xml 

<listener> 
    <listener-class>your listener class</listener-class> 
</listener> 

参考此链接可能会对你有所帮助

Loadonstart up

+0

你应该给解释和链接(并最终编码):)不建议单独使用链接,因为如果外部网站停工,读者将无法理解答案 –

1

如果你想一些代码来运行,当你Web应用程序,又名Servlet上下文,开始的第一次,那么你应该利用由技术提供的钩子。 Servlet API提供了生命周期钩子,用于在Web应用程序的不同生命周期阶段触发代码。由于所有的Struts 2应用程序都是Servlet API Web应用程序,那么你可以自己利用这个。

ServletContextListener接口提供了一个init钩子方法。您只需实现此接口并在web.xml中注册您的实现。请注意,如果您需要做的是更多Struts 2的特定功能,那么您可以考虑从Struts 2 API本身内部使用某些东西。

相关问题