Struts2學習總結(完整版)

1、搭建struts2環境html

一、jar包的導入前端

主要是到web

 

 

解壓其中的一個工程,獲得裏面lib下包含的jarapache

 

 

 

 

把這裏的全部的jar包拷貝到項目的設計模式

WEB-INF目錄下的lib文件夾下面。數據結構

 

二、配置struts.xml文件app

注意:必需要放在src目錄下,由於struts2源碼就是這樣設計的,只有在src目錄下才讀取獲得。jsp

 

 

每個package都要extends=」struts-default」namespace 是 訪問的路徑url

    

 

Action中的namepackage中的namespace組成完整的訪問路徑spa

 

三、配置web.xml

<filter>

        <filter-name>action2</filter-name>

<filter-class>

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

</filter-class>

</filter>

<filter-mapping>

        <filter-name>action2</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>

 

 

四、編寫的Action類都要繼承ActionSupport類或者implements Action接口

 

  默認action類訪問的是裏面的execute方法

 

 

若是要訪問特定的方法,能夠這樣:

(1)action 後面指定 method=「方法名」

(2)使用通配符  <action name=」example_*」  class=」com.XX.YY.ZZ」 method=」{1}」 />

(3)使用動態表達式  好比example!execute(不經常使用)

 

五、接收表單提交的數據

(1)屬性驅動獲取表單參數

--action類中定義與表單的input中  name  同樣的屬性(必須同樣,不然注入不進去)

同時還要生產屬性對應的set 方法,由於 action類要調用set方法把表單中的參數注入到屬性中

(2)模型驅動獲取表單參數

--模型驅動首先action類要實現ModelDrivern,而後重寫getModel方法

--action類中聲明並建立接收表單參數的實體類(Student user = new Student())

--原理分析:struts2調用action類的getModel方法,獲得user對象,而後利用user對象裏面的set屬性的方法,設置user對象的屬性值

--注意,表單的參數name必需要跟Student的屬性值一致,不然注入不進去。

(3)表達式驅動獲取表單數據

--表單提交的時候要註明是哪一個類的,好比user.name

--而後action類要生成user對象的get方法,可讓struts2獲取到actionuser對象,而後調用user對象裏面的get set方法,把參數注入到user對象的屬性中去。

--表達式驅動的方式的好處是,表單能夠傳遞多個不一樣pojo的對象上來,好比不只能夠上傳user的,也能夠上傳book的。這樣,在表單中input中代表 name的時候,寫上  user.xxx  book.xxx

--表達式還支持  map list 表單,能夠同時上傳多分同樣的參數(不經常使用)

Map[「one」].name -> getMap<String , Student>

List[0].name    -> getList<Student>

下面的圖是參考這貨的

http://www.cnblogs.com/lolybj/tag/struts2/

 

 

 

六、把要顯示的數據傳給前端JSP頁面

  原理是利用到struts2的值棧空間,每一次request請求,都會從新建立出一個action類出來,而後在執行action類的方法以前,要通過一系列攔截器的攔截,好比ModelDrivern過濾器進行表單參數的注入。放行後才執行action方法。

如下是action類在值棧中設置數據的三種方法:

一、執行action方法的時候,能夠獲取ValueStack,並向ValueStack中插入數據。

二、直接在action類中定義pojo類,並建立好實例,生成get方法,方便jsp那邊獲取。

三、直接在action類中定義list對象,並將pojo類存入到list對象中去。

設置完以後,就會跳轉到指定的jsp頁面。

在指定的jsp頁面中必須導入<%@ taglib uri="/struts-tags" prefix="s" %> 

Struts2的表達式,其實這個表達式底層調用的是ognl表達式,因此一開始的時候要導入ognl表達式的jar包。

Jsp中獲取值棧的數據。有3中方式

一、<s:property value=」插入值棧的變量名」/>

二、<s:iterator value=」list」 >

   <s:property value=」user.username」/>   //對象名稱.對象屬性

   <s:property value=」user.password」/>

        </s:iterator>

    3<s:iterator value=」list」 var=」user」>

   <s:property value=」#user.username」/>   //對象名稱.對象屬性

   <s:property value=」#user.password」/>

        </s:iterator>

3種爲何要加#號,那是由於 iterator遍歷的時候,先把list中的元素對象先存儲到context的值棧空間裏,context值棧空間的數據結構是map 的。因此要提供user做爲鍵值,獲取到user對象,而後根據對象的get方法,獲得user的屬性值。

這裏要說明一下,action的值棧空間有兩部分組織,一部分是root空間,數據類型是list類型的;另外一部分是context空間,數據類型是map的。

 

七、最後是攔截器

攔截器和過濾器是不一樣的概念的東西;

過濾器:在容器上運行的,會過濾htmlimage... 網頁文件。理論上是過濾全部的網頁的

攔截器:只是攔截某一個action操做的

 

攔截器主要運用是 AOP 和 責任鏈的設計模式。因此能夠作到在建立action類對象後,可是在執行action方法之間執行。

相關文章
相關標籤/搜索