Struts2
Struts2是在WebWork2基礎發展而來的。和struts1一樣,Struts2也屬於MVC框架。不過有一點大家要注意的是:儘管Struts2和struts1在名字上的差別不是很大,但Struts2和struts1在程式設計風格上幾乎是不一樣的。那既然有了struts1,為何還要推出struts2。主要是因為struts2有以下優點:
1>在軟體設計上Struts2沒有像struts1那樣跟ServletAPI和strutsAPI有著緊密的耦合,Struts2的應用可以不依賴ServletAPI和strutsAPI。 Struts2的這種設計屬於無侵入式設計,而Struts1卻屬於侵入式設計。
publicclassOrderListActionextendsAction{
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
throwsException{
}
}
2>Struts2提供了攔截器,利用攔截器可以進行AOP編程,實現如權限攔截等功能。
3>Strut2提供了型別轉換器,我們可以把特殊的請求參數轉換成需要的型別。在Struts1中,如果我們要實現同樣的功能,就必須向Struts1的底層實作BeanUtil註冊型別轉換器才行。
4>Struts2提供支援多種表現層技術,如:JSP、freeMarker、Velocity等
5>Struts2的輸入校驗可以對指定方法進行校驗,解決了Struts1長久之痛。
6>提供了全域範圍、套件範圍和Action範圍的國際化資源檔案管理實現
建置Struts2開發環境
1.找到開發Struts2應用程式需要使用的jar文件
開發Struts2最少需要的jar文件
struts-core-2.xxjar:Struts2框架核心類別庫
xwork-2.xxjar:XWork類別庫,Struts2在其上建構
ognl-2.6.jar:對影像導航語言(ObjectGraphNavigationLanguage),Struts2框架透過其讀寫物件的屬性
freemarker-2.3.x.jar:Struts2的UI標籤範本使用freeMarker編寫
commons-logging-1.1.x.jar:ASF出品的日誌包,Struts2框架使用這個日誌包來支援Log4J和JDK1.4+的日誌記錄
commons-filteupload-1.2.1.jar檔案上傳元件,2.1.6版本後必須加入文件
2.編寫Struts2的設定文件
Struts2預設的設定檔為struts.xml,該檔案需要存放在WEB-INF/classes下,而該檔案的設定範本如下:
<?xmlversion="1.0"encoding="utf-8"?>
<!DOCTYPEstrutsPUBLIC".//ApatcheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""http://struts.apatche.org/dtds/struts-2.0.dtd">
<struts>
</struts>
3.在Web.xml中加入Struts2MVC框架啟動配置
在struts1.x中,struts框架是透過Servlet啟動的。在struts2中,struts框架是透過Filter啟動的。他在web.xml中的配置如下:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apatche.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!--自從Struts2.1.3以後,下面的FilterDispatcher已經標註為過時
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>-->
</filter>
<filter=mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*<url-pattern>
</filter-mapping>
在StrutsPerpareAndExecuteFilter的init()方法將會讀取類別路徑下預設的設定檔struts.xml完成初始化操作。
Struts.xml配置中包的介紹
<packagename="itcast"namespace="/test"extends="struts-defult">
<actionname="helloworld"class="cn.itcast.action.HelloWorldAction"method="execute">
<resultname="success">/WEB-INF/page/hello.jsp</result>
</action>
</package>
找它需要開發的jar檔需要解壓縮:struts-2.3.8-all.gz
或struts-2.3.8-apps.gz找到struts-2.3.8-all/struts-2.3.8/apps下面的檔案如下:
提供了一個空白的專案struts2-blank我們就可以在這個專案上進行開發struts2.
如果開發的過程中需要其他的jar的文件的支持怎麼辦?
需要到/struts-2.3.8-all/struts-2.3.8/lib中找對應的jar檔。
struts2-blank.war專案怎麼解壓縮--複製到tomcat中的webapps中啟動tomcat即可
在apache-tomcat/bin找到startup.bat點擊啟動
觀察:
可以開啟瀏覽器IE
輸入http://localhost:8080/struts2-blank
找到解壓縮後的jar檔:apache-tomcat/webapps/struts2-blank/WEB-INF/lib
Bug記錄:
1、java.net.BindException:Addressalreadyinuse:JVM_Bind
分析:你使用的tomcat被第二次或是n次啟動以前沒有關閉導致的一個bug
解決方法:
關閉已經啟動的tomcat即可。
HTTPStatus404-/demo/servlet/demo.do
分析:找不到你要求的url既是:servlet/demo.do
解決方法:
看你的url是否存在?如果不存在根據業務添加。
3、
ThereisnoActionmappendforactionnamedemo.
分析:在伺服器端找不到對應的demo的action
Demo.action
/csdn/demo.action
只提示:demo沒有找到
/csdn下面沒有找到demoaction
Bug
Noresultdefinedforactioncom.opensymphony.xwork2.ActionSupportandresultsuccess