簡體   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