Struts2學習筆記(未完待續)

    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卻屬於侵入式設計。 html

1 public class OrderListAction extends Action{
2     public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,
3         HttpServletResponse response) throws Exception{}
4   }

    2>Struts2提供了攔截器,利用攔截器能夠進行AOP編程,實現如權限攔截等功能。
    3>Struts2提供了類型轉換器,咱們能夠把特殊的請求參數轉換成須要的類型。在struts1中,若是咱們要實現一樣的功能,就必須想struts1的底層實現BeanUtil註冊類型轉換器才行。
    4>Struts2提供支持多種表現層技術,如:JSP、freeMarker、Velocity等
    5>Struts2的輸入校驗能夠對指定方法進行校驗,解決了Struts1長久之痛。
    6>提供了全局範圍、包範圍和Action範圍的國際化資源文件管理實現  java

搭建Struts2開發環境
搭建Struts2環境時,咱們通常須要作如下幾個步驟的工做:(一下文件均可以在下載的struts2的文件夾中能夠找到,找不到的能夠聯繫我。QQ:434551893)
     1>找到開發Struts2應用須要使用到的jar文件,拷貝到WEB-INF下/lib目錄下
     2>編寫Struts2的配置文件struts2.xml
     3>在web.xml中加入Struts2 MVC框架啓動配置
添加源碼文件(創建jar文件對應的源碼):右鍵點擊以前添加的struts2-core-2.3.24.1.jar文件,選擇Properties --> Java Source Attachment --> External Folder,而後選擇源碼位置struts-2.3.24.1\src\core\src\main\java
xwork2.3.3 源碼:在xwork2.3.3.jar上右鍵--屬性--java source Attachment,選擇external folder把解壓後的文件目錄定位到Java便可,路徑是xwork-core/src/main/java
添加文檔文件:右鍵點擊以前添加的struts2-core-2.3.24.1.jar文件,選擇Properties --> Javadoc Location --> URL--Browse  找到struts-2.3.24.1\docs\struts2-core\apidocs OK!          
快速提示設置:先在本地解壓一個lib文件夾下邊struts2-core-2.3.24.1.jar文件,裏邊能夠看到dtd文件。而後打開window --> Preferences --> 搜索catalog  選中XML Catalog  點擊Add  Location:本地dtd文件位置,Key Type:選擇URI,Key:struts2.xml配置文件中的http://struts.apache.org/dtds/struts-2.3.dtdweb

路徑問題:struts2中的路徑問題是根據action的路徑而不是jsp路徑來肯定,因此儘可能不要使用相對路徑。雖然能夠用redirect方式解決,但redirect方式並不是必要。解決辦法很是簡單,統一使用絕對路徑。(在jsp中用request.getContextRoot方式來拿到webapp的路徑。例如:在jsp的<head>標籤前邊寫上:<% String context = request.getContextPath(); %>,在<body>標籤裏面使用:<a href="<%=context %>/actions(actions是namespace)/Studentadd(這是action)">添加學生</a>)或者使用myeclipse常用的,指定basePath:<base href="<%=basePath%>"/>   apache

Struts2應用的配置文件
Struts2默認的配置文件爲struts.xml,該文件須要存放在WEB-INF/classes下,在開發階段能夠放在src下就能夠,該文件的配置模板以下(最基本的配置中<struts>標籤裏邊爲空就能夠):編程

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <constant name="struts.devMode" value="true" />  <!-- 設置爲開發模式,更改東西能夠很快就會有反饋 -->     
 7     <package name="ghostman" namespace="/test" extends="struts-default">  //定義一個包來管理action。action訪問路徑爲:namespace/+"action的name"             
 8         //com.ghostman.action包名,HelloWorldAction包中類名,execute是HelloWorldAction類中的execute()方法,而且返回值是String
 9         <action name="helloworld" class="com.ghostman.action.HelloWorldAction" method="execute">   //此action的訪問路徑爲/test/helloworld.action
10             <result name="success">/WEB-INF/page/hello.jsp</result>  //執行該Action時會跳轉到/WEB-INF/page下的hello.jsp
11         </action>
12         <action name="addUI">
13             <result>/WEB-INF/page/employeeAdd.jsp</result>
14         </action>
15     </package>
16 </struts>
struts2配置模板

Action配置中的各項默認值  api

  一、若是沒有爲action指定class,默認是ActionSupport。  app

  二、若是沒有爲action指定method,默認執行action中的execute()方法。  框架

  三、若是沒有指定result的name屬性,默認值爲success。凡是name是success的result均可以不寫name屬性。 eclipse

Action執行的時候並不必定要執行execute方法,能夠在配置Action的時候用method=""來指定執行哪一個方法,也能夠在url地址中動態指定(動態方法調用DMI)(推薦)。 webapp

struts2框架中使用包來管理Action,包的做用和java中的類包是很是類似的,它主要用於管理一組業務功能相關的action。 在實際應用中,咱們應該把一組業務功能相關的Action放在同一個包下。其實包的做用其實就是爲了防止重名。包還能夠經過abstract="true"定義爲抽象包,抽象包中不能包含action。

配置包時必須指定name屬性,該name屬性值能夠任意取名,但必須惟一,它不對應java的類包,若是其餘包要繼承該包, 必須經過該屬性進行引用。

包的namespace屬性用於定義該包的命名空間,namespace必須以"/"開頭,命名空間做爲訪問該包下Action的路徑的一部分,如訪問上例的Action, 訪問路徑爲:/test/helloworld.action。 namespace最好也用模塊來進行命名 namespace屬性能夠不配置,意味着namespace="",對本例而言,若是不指定該屬性,默認的命名空間爲""(空字符串)。

一般每一個包都應該繼承struts-defaul包,由於struts2不少核心的功能都是攔截器來實現。如:從請求中把請求參數封裝到action、 文件上傳和數據驗證等等都是經過攔截器實現的。 struts-defaul定義了這些攔截器和Result類型。能夠這麼說:當包繼承了struts-defaul才能使用struts2提供的核心功能。 struts-defaul包是在struts2-core-2.x.x.jar文件中的struts-defaul.xml中定義。 struts-defaul.xml也是struts2默認配置文件。Struts2每次都會自動加載struts-defaul.xml文件。

拷貝其餘項目應注意:拷貝其餘struts2項目時,須要右鍵選中拷貝的項目名,選擇Properties,找到MyEclipse下的web,必定把Web Context-root中的內容修改成你本身項目的名字,否則部署以後會找不到文件

通配符的使用:能夠將配置降到最低,不過必定要遵照」約定優於配置「的原則。若是有多個<action>能夠匹配,首先匹配最精確的。若是都是通配符,則誰在前邊調用誰。舉例以下:

StudentAction:

 1 package com.hp.struts2.action;
 2 import com.opensymphony.xwork2.ActionSupport;
 3 public class StudentAction extends ActionSupport{
 4     public String add(){
 5         return SUCCESS;
 6     }
 7     public String delete(){
 8         return SUCCESS;
 9     }
10 }
StudentAction.java

TeacherAction:

 1 package com.hp.struts2.action;
 2 import com.opensymphony.xwork2.ActionSupport;
 3 public class TeacherAction extends ActionSupport{
 4     public String add(){
 5         return SUCCESS;
 6     }
 7     public String delete(){
 8         return SUCCESS;
 9     }
10 }
TeacherAction.java

struts.xml:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <constant name="struts.devMode" value="true" />   <!-- 設置爲開發模式,更改東西能夠很快就會有反饋 -->
 7     <package name="default" namespace="/actions" extends="struts-default">
 8         <action name="Student*" class="com.hp.struts2.action.StudentAction" method="{1}">
 9             <result>/Student{1}_success.jsp</result>
10         </action>    
11         <action name="*_*" class="com.hp.struts2.action.{1}Action" method="{2}">
12             <result>/{1}_{2}_success.jsp</result>
13         </action>    
14     </package>
15 </struts>
struts.xml

在WebRoot下面建立Studentadd_success.jsp、Studentdelete_success.jsp、Teacher_add.jsp、Teacher_delete.jsp
解釋:針對第一個<action>,當接收到Studentadd和Studentdelete的action時,會自動匹配到Student*,此時*即add或者delete,{1}是第一個與*匹配的方法,即add()和delete()方法。針對第二個<action>,當接收到Teacher_add和Teacher_delete的action時,會自動匹配到第二個<action>,此時的前邊的*就是{1},即Teacher,後邊的*就是{2},即add或者delete。若是看不懂能夠加我QQ:434551893一塊兒交流交流

用Action的屬性接收參數:Struts2中Action的屬性接收參數,有三種傳遞並接收參數的方式,第一種是在Action添加成員屬性接收參數,第二種是域模型(DoMainModel),就是利用對象域來進行傳遞和接收參數,第三種是ModelDriven接收參數。具體內容請參考:http://www.2cto.com/kf/201503/384769.html,http://www.cnblogs.com/bukudekong/archive/2012/03/29/2423064.html

相關文章
相關標籤/搜索