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

Java 如何使用Struts2在服务器启动时运行操作?,java,tomcat,struts2,action,startup,Java,Tomcat,Struts2,Action,Startup,我必须在服务器启动时执行struts2操作,而不是在第一个请求时执行 编写一个ServletContextListener,每个web应用程序只能使用一个,并且在部署应用程序时将被安装 下面是servlet中启动时的加载,jsp如下所示 您可以要求在服务器启动时加载页面。这是通过web.xml文件完成的 <servlet> <servlet-name>login</servlet-name> <jsp-file>/login.jsp</jsp

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

编写一个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>

登录
/login.jsp
1.
通常jsp文件是在第一次点击时编译的。 现在,代码表示不等待第一次命中就预编译jsp文件

For struts2 you can change programatically in web.xml 

<listener>
    <listener-class>your listener class</listener-class>
</listener>
对于struts2,您可以在web.xml中以编程方式进行更改
你的听众课
请参考此链接,它可能会对您有所帮助


.

如果您想在web应用程序(也称为Servlet上下文)首次启动时运行一些代码,那么您应该利用该技术提供的挂钩。ServletAPI为您提供了生命周期挂钩,用于在web应用程序的各个生命周期阶段触发代码。因为所有Struts 2应用程序都是Servlet API web应用程序,所以您可以自己利用它

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


注意,如果你需要做的是更多的Struts 2具体的,那么你可以考虑从Struts 2 API本身中使用一些东西。p> 在应用程序启动时加载数据是一项常见任务,您可以在web上找到几个示例。正如在其他答案中所说,您应该实现一个ServletContextListener(它不是Struts2特有的)。。。你可以

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

Struts2 MVC
(模型-视图-控制器)框架中,
操作
控制器
(以及
模型
的一部分)

操作
s由来自
客户端的
请求
s调用(每个请求都会创建一个操作,因此它们是线程安全的)

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


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

为什么要在服务器启动时调用操作?我需要预先初始化存储在应用程序作用域中的一些数据,以便访问这些数据的ajax请求能够在用户发出第一个请求后快速响应。您应该给出解释和链接(最终是代码):)不建议单独使用链接,因为如果外部站点关闭,读者将无法理解答案