我在Struts1中有我的應用程序,並且我在所有操作中都使用了Dispatch動作。請現在告訴我如何切換到struts 2以及應該做些什麼修改來改變我所有的操作和表單bean。從Struts1遷移到Struts2
回答
我會建議您在該文檔系列:
- http://www.infoq.com/articles/converting-struts-2-part1
- http://www.infoq.com/articles/migrating-struts-2-part2
首先鏈接解釋的話題並沒有在第二環節的例子。我寫在那裏拍攝的解釋如下:
配置框架
第一個,也是最重要的配置,是一個能夠使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)開始在同一時間使用這種模式。
您可能使用dynamic method invocation隱約-模仿老DispatchAction
風格「傳遞方法名」的功能(或者你可以寫一個使用的參數做同樣的事情的攔截器)。
不存在「形式豆」本身在Struts 2中,雖然可以實現ModelDriven
(some docs),它排序 -of就像一個表單bean。
所有JSP都需要重寫,但前提是您使用的是Struts 1標籤。如果您只使用JSTL標籤,您可能需要。
Ischin提供的鏈接是開始獲取更多細節的好地方。
- 對於Struts的2.X:讓調度員行動過濾器
*.action
- 爲Struts 1.x的:使動作過濾器
*.do .
- 1. 從Struts1遷移到Struts2
- 2. Struts2使用struts2-struts1-plugin從Struts1遷移
- 3. Struts1到Struts2的遷移策略
- 4. struts1到struts2遷移消息資源
- 5. Struts1遷移到Struts 2
- 6. 從Struts2遷移到Spring MVC
- 7. 從普通的Java遷移到Struts2的
- 8. Struts2/Struts1動作調用
- 9. 建議從struts1→(struts2,spring)的進程路徑
- 10. 從RabbitMQ遷移到Webshpere MQ
- 11. 從v9.1遷移到datastage v11.3
- 12. 從涼亭遷移到紗
- 13. 從窗體遷移到WPF
- 14. 從HTTP遷移到HTTPS
- 15. 從SQL Server遷移到MySql
- 16. 從Cloudera遷移到Hortonworks
- 17. 從Perforce遷移到Subversion
- 18. 從qmake遷移到cmake
- 19. 從plone 3.3.5遷移到4.1
- 20. 從http遷移到ngResource Angular
- 21. 從lighttpd遷移到nginx
- 22. 從DotNetNuke遷移到ASP.NET Core
- 23. 從gitlap遷移到tuleap?
- 24. 從web.xml遷移到JavaConfig
- 25. 從SQL Server遷移到MySQL
- 26. 從LinkedBlockingQueue遷移到LMAX'Disruptor
- 27. 從glassfish遷移到tomee +
- 28. 從LFS遷移到附件
- 29. 從grails遷移2.1.1。到2.3.10
- 30. 從sqlite遷移到postgresql
閱讀** [遷移指南:Struts的1 to Struts 2](http://struts.apache.org/2.2.3.1/docs/migration-guide.html#MigrationGuide-Struts1toStruts2)** – lschin