Struts2是在WebWork2基礎發展而來的。和struts1一樣, Struts2也屬於MVC架構。不過有一點大家需要注意的是:儘管Struts2和Struts1在名字上的差別不是很大,但Struts2和Struts1在代碼編寫風格上幾乎是不一樣的。那麼既然有了Struts1,為何還要推出
Struts2。主要是因為Struts2有以下優點:
1. 在軟體設計上Struts2沒有像struts1那樣跟Servlet API和struts API有著緊密的耦合,Struts2的應用可以不依賴於Servlet API和struts API。 Struts2的這種設計屬於無侵入式設計,而Struts1卻屬於侵入式設計。
2. Struts2提供了攔截器,利用攔截器可以進行AOP編程,實現如許可權攔截等功能。
3. Strut2提供了類型轉換器,我們可以把特殊的請求參數轉換成需要的類型。在Struts1中,如果我們要實現同樣的功能,就必須向Struts1的底層實現BeanUtil註冊類型轉換器才行。
4. Struts2提供支援多種表現層技術,如:JSP、freeMarker、Velocity等
5. Struts2的輸入校正可以對指定方法進行校正,解決了Struts1長久之痛
6. 提供了全域範圍、包範圍和Action範圍的國際化資源檔管理實現
搭建Struts2環境時,我們一般需要做以下幾個步驟的工作:
找到開發Struts2應用需要使用到的jar檔案.
- ognl-2.6.x.jar :對象圖導航語言(Object Graph Navigation Language),struts2架構通過其讀寫對象的屬性
- freemarker-2.3.x.jar :Struts 2的UI標籤的模板使用FreeMarker編寫
- commons-logging-1.x.x.jar :ASF出品的日誌包,Struts 2架構使用這個日誌包來支援Log4J和JDK 1.4+的日誌記錄。
- commons-fileupload-1.2.1.jar 檔案上傳組件,2.1.6版本後必須加入此檔案
2. 編寫Struts2的設定檔
Struts2預設的設定檔為struts.xml ,該檔案需要存放在WEB-INF/classes下(放在src檔案下即可,部署時自動載入到classes下),該檔案的配置模版如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- structs2配置模板 -->
</struts>
3. 在web.xml中加入Struts2 MVC架構啟動配置
在struts1.x中, struts架構是通過Servlet啟動的。在struts2中,struts架構是通過Filter啟動的。他在web.xml中的配置如下:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在StrutsPrepareAndExecuteFilter的init()方法中將會讀取類路徑下預設的設定檔struts.xml完成初始化操作。
注意:struts2讀取到struts.xml的內容後,以javabean形式存放在記憶體中,以後struts2對使用者的每次請求處理將使用記憶體中的資料,而不是每次都讀取struts.xml檔案
最後部署到tomcat進行測試,成功啟動即搭建成功
在struts-2.3.1.2中,需要的最小jar包為:
commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
commons-logging-1.1.1.jar
freemarker-2.3.18.jar
ognl-3.0.4.jar
struts2-core-2.3.1.2.jar
xwork-core-2.3.1.2.jar
commons-lang-2.5.jar
javassist-3.11.0.GA.jar
參考app目錄下的war包中配置