Struts2的深入理解與使用(一)

唯有死磕自己,纔有成長!
要深入理解一門開發技術,我覺得要從哲學的角度去體會它是什麼?爲什麼?怎麼用?

1.Strtus2是什麼?

    Struts2是一個基於MVC設計模式的Web應用框架,它本質上相當於一個servlet,在MVC設計模式中,Struts2作爲控制器(Controller)來建立模型與視圖的數據交互。Struts 2是Struts的下一代產品,是在 struts 1和WebWork的技術基礎上進行了合併的全新的Struts 2框架。其全新的Struts 2的體系結構與Struts 1的體系結構差別巨大。Struts 2以WebWork爲核心,採用攔截器的機制來處理用戶的請求,這樣的設計也使得業務邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解爲WebWork的更新產品。雖然從Struts 1到Struts 2有着太大的變化,但是相對於WebWork,Struts 2的變化很小。

2.爲什麼(Struts的原理)?

      一個請求在Struts2框架中的處理大概分爲以下幾個步驟(可查看源碼:https://github.com/apache/struts):
    1 客戶端初始化一個指向Servlet容器(例如Tomcat)的請求
    2 這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他框架的集成很有幫助,     例如:SiteMesh Plugin)
    3 接着FilterDispatcher(現已過時)被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action
    4 如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy
    5 ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類
    6 ActionProxy創建一個ActionInvocation的實例。
    7 ActionInvocation實例使用命名模式來調用,在調用Action的過程前後,涉及到相關攔截器(Intercepter)的調用。
    8 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可 能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標籤。在這個過程中需要涉及到ActionMapper

3.怎麼用(配置Struts2de 步驟)

> 1)配置web.xml
  2)配置struts.xml文件
       <package name="default" namespace="/" extends="struts-default"> 	
		<action name="hello" class="action.HelloAction" >
			<result name="input">hello.jsp</result>   (返回字符串爲input,就跳轉到hello.jsp頁面)
			<result name="success">hello.jsp</result>
		</action>
		<action name="houseAction" class="action.HouseAction">
			<result name="success">page/list.htm</result>
		</action>	
      </package></span>
             注意:配置文件裏的“action name”  要與form表單裏的“action name”保持一致,並且提交方式一定要設置爲post,method="post"

      3)創建Action類(相當於一個Servlet)   ,一共有三種方式

         1.實現Action接口,重寫execute()方法

           2.繼承ActionSupport類,重寫execute()方法(推薦使用

           3.寫一個普通的,不帶參數的execute()方法,例如

     4)Action 接受參數的方法
       
   1> 在 Action 中定義屬性:

                                   private String name;

                                   並添加 setter/getter 方法 在頁面中使用 <input type="" name="name" />
          2> javaBean 方式定義 JavaBean :

                      1)創建User實體類User: name, password

                      2)在 Action 中定義屬性:private User user;並添加 setter/getter 方法,

                      3)在頁面中使用:<input type="' name="user.name" />
 
    5)在只寫一個Action,內部有N個方法的前提下,如何調用Action方法呢?

                   1> 在配置中指定方法名:<action name="userAction" class="action.UserAction" method="login">(推薦使用
 
                    2> 動態方法調用:
                                配置:<action name="userAction" class="action.UserAction">
                                調用時,地址:userAction!add

                    3> 通配符方式
                                配置:<action name="*_Action_*" class="action.{1}Action" method="{2}">
                                調用時:地址:House_Action_add 將會由 HouseAction 中的 add() 處理。

                                ***2,3的缺點,配置不清晰,另外,result 需要單獨配置


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章