2011-10-19 59 views
3

我在Struts1中有我的應用程序,並且我在所有操作中都使用了Dispatch動作。請現在告訴我如何切換到struts 2以及應該做些什麼修改來改變我所有的操作和表單bean。從Struts1遷移到Struts2

+4

閱讀** [遷移指南:Struts的1 to Struts 2](http://struts.apache.org/2.2.3.1/docs/migration-guide.html#MigrationGuide-Struts1toStruts2)** – lschin

回答

6

我會建議您在該文檔系列:

首先鏈接解釋的話題並沒有在第二環節的例子。我寫在那裏拍攝的解釋如下:

配置框架

第一個,也是最重要的配置,是一個能夠使servlet容器web.xml文件中的Web應用程序框架。

,每個人都應該熟悉Struts的配置是:

<servlet> 
<servlet-name>action</servlet-name> 
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 
<init-param> 
    <param-name>config</param-name> 
    <param-value>/WEB-INF/struts-config.xml</param-value> 
</init-param> 
<load-on-startup>2</load-on-startup> 
</servlet> 

<servlet-mapping> 
<servlet-name>action</servlet-name> 
<url-pattern>*.do</url-pattern> 
</servlet-mapping> 

對於Struts2的也有極少數的變化。最重要的是調度器已經從一個servlet變成了一個servlet過濾器。配置僅僅是作爲一個servlet一樣簡單,在這裏顯示:

<filter> 
<filter-name>webwork</filter-name> 
<filter-class> 
    org.apache.struts.action2.dispatcher.FilterDispatcher 
</filter-class> 
</filter> 

<filter-mapping> 
<filter-name>webwork</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 

解構操作

在我們談到一些從Struts和Struts2的之間的差異請求步行通過高水平。現在讓我們更深入一步,看看每個框架中的行爲結構之間的差異。

我們先來回顧一下Struts動作的一般結構。 Struts動作的一般形式如下所示:

公共類MyAction延伸行動{ 公共的ActionForward執行(的ActionMapping映射, ActionForm的形式, HttpServletRequest的請求, HttpServletResponse的響應) 拋出異常{// 做工作 返回(mapping.findForward(「success」)); }}

當實現一個Struts動作時,需要注意以下事項:

  • 所有行動必須擴展行動基類。
  • 所有操作都必須是線程安全的,因爲只創建一個操作實例。
  • 由於操作必須是線程安全的,所以在操作處理中可能需要的所有對象都將在方法簽名中傳遞。
  • 爲處理動作而調用的方法的名稱是「execute」(在Struts中有一個DispatchAction類可用於將要執行的方法重新路由到同一動作中的另一個方法,但是從框架到動作的初始入口點仍然是「執行」方法)。
  • ActionForward結果使用ActionMapping類中的方法返回,通常通過「findForward」方法調用返回。

相比之下,Struts2的操作提供了一個更簡單的實現。以下是它的樣子:

public class MyAction { 
    public String execute() throws Exception { 
     // do the work 
     return "success"; 
    } 
} 

您可能已經注意到的第一件事是該操作不會擴展任何類或接口。事實上,它比這更進一步。按照慣例,在處理動作時調用的方法是「execute」方法 - 但它不一定是。方法簽名public String methodName()後面的任何方法都可以通過配置來調用。最後,也許是與原始Struts實現最具革命性的不同之處在於,在處理動作(「execute」方法)時調用的方法沒有參數。那麼如何訪問需要使用的對象呢?答案在於「控制反轉」或「依賴注入」模式(更多信息Martin Fowler在http://www.martinfowler.com/articles/injection.html上有一篇內容豐富的文章)。 Spring框架普及了這種模式,然而,Struts2的前身(WebWork)開始在同一時間使用這種模式。

0

可能使用dynamic method invocation隱約-模仿老DispatchAction風格「傳遞方法名」的功能(或者你可以寫一個使用的參數做同樣的事情的攔截器)。

不存在「形式豆」本身在Struts 2中,雖然可以實現ModelDrivensome docs),它排序 -of就像一個表單bean。

所有JSP都需要重寫,但前提是您使用的是Struts 1標籤。如果您只使用JSTL標籤,您可能需要

Ischin提供的鏈接是開始獲取更多細節的好地方。

0
  • 對於Struts的2.X:讓調度員行動過濾器*.action
  • 爲Struts 1.x的:使動作過濾器*.do .