繁体   English   中英

如何使用Struts2在服务器启动时运行操作?

[英]How do I run an action on server startup using Struts2?

我必须在服务器启动时而不是在第一个请求上执行struts2操作。

在启动应用程序时加载数据是一项常见任务,您可以在Web上找到几个示例。 正如在其他答案中所说,你应该实现一个ServletContextListener(这不是Struts2特定的)...你可以在这里阅读一个很好的例子

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

Struts2 MVC (模型视图控制器)框架中, ActionController (和Model一部分)。

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

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

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

编写一个ServletContextListener,每个Web应用程序只能使用一个,并在部署应用程序时进行实例化。

这是帖子

servlet和jsp启动时的加载如下所示

您可以在服务器启动时要求加载页面。 这是通过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

如果您希望在Web应用程序 (即Servlet Context)首次启动时运行某些代码,那么您应该利用该技术提供的钩子。 Servlet API提供生命周期钩子,供您在Web应用程序的各个生命周期阶段触发代码。 由于所有Struts 2应用程序都是Servlet API Web应用程序,因此您可以自己利用它。

ServletContextListener接口提供了一个init钩子方法。 您只需实现此接口并在web.xml中注册您的实现。

注意,如果你需要做的是更具体的Struts 2,那么你可以考虑使用Struts 2 API本身的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM