簡體   English   中英

Web應用程序中可以存在多少個請求處理器實例?

[英]How many instances of request processor can exist in web application?

我正在閱讀一些有關struts 1.x的博客,發現每個Web應用程序只能有一個動作servlet實例,每個Web應用程序模塊只能有一個請求處理器實例。

有人可以解釋一下這里的應用程序模塊到底是什么意思嗎? 或如何為應用程序模塊配置請求處理器?

在所有的Struts版本(包括1.1版)中,每個Web應用程序(即.war文件)只能運行一個ActionServlet控制器servlet實例。 這是因為ActionServlet將框架配置的一些詳細信息存儲在Web應用程序范圍內的變量中,該范圍是應用程序所有部分共享的范圍。 因此,嘗試在同一Web應用程序中運行多個ActionServlet實例會導致問題,因為與一個實例關聯的數據會覆蓋與另一個實例關聯的數據。

在版本1.1之前,整個應用程序的配置必須駐留在單個Struts配置文件中。 對於大型應用程序,其中的配置文件非常大,涉及多個開發人員,這被證明是一個有爭議的問題。

為了解決這個問題,在更高版本中,struts通過使用模塊將應用程序細分為謹慎的單元來提供具有多個實例的功能。 每個模塊都有自己的Struts配置文件,自己的動作和轉發集,單獨的URL命名空間等等。 本質上,模塊就像主Struts應用程序中的mini-Struts應用程序一樣。 盡管在與版本(1.1)相同的模塊中添加了多個配置文件,但可以獨立使用多個配置文件,而不必轉換應用程序以與模塊一起使用。 對多個配置文件的支持減輕了與Struts基於團隊的大型開發相關的一些問題。 但是,多個配置文件不能像模塊那樣對Struts應用程序進行分區。 當使用多個配置文件時,文件中的信息會合並以創建一大套配置數據。 但是,這可能會導致問題。 例如,如果您在一個文件中定義了具有特定名稱的操作,而另一個配置文件定義了具有相同名稱的另一個操作,則上次讀取的配置文件將覆蓋第一個文件的數據。 基本上,最后一個贏。 模塊沒有此問題,因為Struts分別存儲每個模塊的配置數據。 在每個配置文件中,您可以使用控制器標簽配置自定義請求處理器。

如何為每個模塊創建Struts配置文件?

  1. 為每個模塊創建一個單獨的Struts配置文件-

    /WEB-INF/struts-config-moduleA.xml
    /WEB-INF/struts-config-moduleB.xml

  2. 配置模塊的web.xml部署描述符

     <!-- Action Servlet Configuration --> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config/moduleA</param-name> <param-value>/WEB-INF/struts-config-moduleA.xml</param-value> </init-param> <init-param> <param-name>config/moduleB</param-name> <param-value>/WEB-INF/struts-config-moduleB.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> 

我不確定這是否能回答您的問題,但這可能對您有用。

如果要擴展RequestProcessor類,則需要做兩件事-

  1. 擴展RequestProcessor類。 范例-

     public class CustomRequestProcessor extends RequestProcessor{ // Do whatever you want } 
  2. 在struts-config.xml中為控制器創建一個條目,示例-

     <controller contentType="text/html;charset=UTF-8" locale="true" processorClass="fully qualified custom request processor class name" /> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM