6

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

4

4 回答 4

5

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

这里重要的是理解 Action 概念:

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

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

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

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

于 2013-01-16T16:24:23.980 回答
3

编写一个 ServletContextListener,每个 Web 应用程序只有一个可用,并且在部署应用程序时将被实例化。

这是帖子

于 2013-01-16T12:15:04.697 回答
2

在 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>

参考这个链接它可能对你有帮助

加载启动

于 2013-01-16T12:28:10.987 回答
2

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

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

请注意,如果您需要做的是更多特定于 Struts 2 的操作,那么您可以考虑使用 Struts 2 API 本身中的某些内容。

于 2013-01-16T15:36:02.443 回答