Struts功能詳解——Action

來源:互聯網
上載者:User

Action是struts中的一個抽象類別,它其實是Struts的心臟部分,前面提到的ActionServlet和ActionForm進過處理擷取的請求和資料,都會到達Action中得到分發。

一:Action有那些作用
  1. 可以進行一些表單資料的檢查,這裡面的檢查一般和頁面的檢查是不一樣的,頁面的檢查都是用戶端的一些資料格式規範的檢查,這裡的檢查而與業務相關的檢查一般放到這裡面檢查,比如與JavaBean相關的一些操作。也可以說它是一個商務邏輯的管理分發的地方。
  2. 執行必要的商務邏輯,不如存取資料庫,調用實體bean等。它會直接調用商務邏輯層的javabean去處理資料庫的操作,比如增刪改查等。
  1. 根據處理的結果決定程式的去向,並以ActionForward對象的形式傳遞給ActionServlet,這樣ActionServlet通過設定檔,決定返回的資料到達那個頁面。
  1. Action是一個抽象類別,必須實現以後才能執行,執行的方法是execute方法。

 

二 :一個完整的Action樣本和執行流程。

 

<actionpath="/aFullAction"type="somePackage.someActionClass">name="someForm"input="someJSP.jsp"<forwardname="successful" path="someJSP.jsp"/><forwardname="failed" path="someOtherJSP.jsp"/></action>

Action執行流程

首先,Struts的ActionServlet接收到一個請求,然後根據struts-config.xml的配置定位到相應的mapping(映射);接下來如果form的範圍是request或者在定義的範圍中找不到這個form,建立一個新的form執行個體;取得form執行個體以後,調用其 reset()方法,然後將表單中的參數放入form,如果validate屬性不為false,調用validate()方法;如果validate()返回非空的ActionErrors,將會被轉到input屬性指定的URI,如果返回空的ActionErrors,那麼執行Action的 execute()方法,根據返回的ActionForward確定目標URI。

這樣做的效果是:execute()僅當validate()成功以後才執行;input屬性指定的是一個URI。

 

三.一個特殊的Action:DispatchAction

由於當業務太多的時候,每個業務都要創造一個Action,這樣會大大增加Action的數量,而且也會造成浪費。

它的主要好處就是把所有的Action放到一個類裡面,通過傳過來的參數決定調用那個Action操作。

DispatchAction類是一個抽象類別,它實現了父類(Action)的execute()方法,所以它的子類就不用來實現這個方法了,只需要專註與實際操作的方法。

 

下面看一個dispatchAction應用執行個體。 1.首先要一個DispatchAction的子類,它含有一些方法,login,logout,method1,

public class AccountAction extends DispatchAction {    public ActionForward login(ActionMapping mapping,                              ActionForm form,                              HttpServletRequest request,                              HttpServletResponse response)    throws Exception {        // 進行一些Login的邏輯              return mapping.findForward("success");       }                                                                                   public ActionForward logout(ActionMapping mapping,                                ActionForm form,                                HttpServletRequest request,                                HttpServletResponse response)    throws Exception {        // 進行一些Logout的邏輯              return mapping.findForward("success1");       }    public ActionForward method1(ActionMapping mapping,                                ActionForm form,                                HttpServletRequest request,                                HttpServletResponse response)    throws Exception {        // 進行一些method1的邏輯              return mapping.findForward("success");      }}

  一定要注意在DispatchAction中你想執行的操作,都必須要有統一的參數(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response),是一個規定.

2.接下來是配置struts-config.xml

 

 <action path="/login"  type="examples.AccountAction"              name="logonForm"             scope="request"             parameter="action"             input="/pages/dispatch1.jsp">       <forward name="success" path="/pages/success.jsp" />    </action>     <action path="/logout"  type="examples.AccountAction"              name="logonForm"             scope="request"             parameter="action"             input="/pages/dispatch1.jsp">       <forward name="success1" path="/pages/success1.jsp" />    </action>

 這裡需要注意的就是parameter屬性的值,因為這個值要和頁面傳來的參數對應.

 

3.再來看看JSP頁 pages/dispatch1.jsp

 <%@ taglib uri="/tags/struts-html" prefix="html" %><html:link href="/DispathActionTest/login.do?action=login">login</html:link><br><html:link href="/DispathActionTest/logout.do?action=logout">logout</html:link>

 這裡要注意幾點,首先 ?後面的KEY要和struts-config.xml中的parameter相同,還有它的VALUE要是你在action的一個方法名字,這裡方法名為login, 那麼在程式運行時就是調用login的操作,如果是logout,那程式就調用logout的操作.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.