天天看點

Struts 2 的Action詳解(一)

Action類包含了對使用者請求的邏輯處理,是以将Action稱作業務控制器。

1 編寫Action的實作類

Struts 2的Action采用低侵入式,不要求實作任何類或接口,完全是一個普通的POJO(Plain Ordinary Java Objects簡單的Java對象),有很好的複用性。

Struts 2通常直接使用Action來封裝HTTP請求參數,是以需為Action中的屬性添加getter()/setter()方法。

1.1 實作Action接口以規範Action類的開發

Struts 2 提供了一個Action接口,定義了Struts 2的Action應該實作的規範。

publicinterface Action {

/**定義的處理完請求後傳回的字元串 */

publicstaticfinal String SUCCESS="success";

publicstaticfinal String NONE="none";

publicstaticfinal String ERROR="error";

publicstaticfinal String INPUT="input";

publicstaticfinal String LOGIN="login";

/** 定義使用者請求處理方法 */

public String execute()throws Exception;

}

1.2 繼承ActionSupport類來簡化Action開發

ActionSupport類是一個預設的Action,有許多預設方法:資料的校驗、錯誤添加、國際化處理(getText(),getTexts())等。

2 通路Servlet API

2.1 使用ActionContext類通路Servlet API

Struts 2的Action并未與Servlet API進行耦合,對于Web控制器而言,必須通路Action。

Struts 2提供ActionContext類來通路Servlet API。通常要通路的Servlet API是HttpSession、HttpServletRequest、ServletContext,分别對應JSP内置對象session、request和application。

2.2 實作xxxAware接口直接通路Servlet API

雖然ActionContext可以通路Servlet API ,但畢竟不能直接獲得Servlet API執行個體。為了使Struts 2能直接通路到Servlet API的執行個體,提供了接口:ServletContextAware、ServletRequestAware、ServletResponseAware

例如:

publicclassLoginActionextends ActionSupport implements ServletRequestAware{

private HttpServletRequest request;

/** 這個方法有一個HttpServletRequest參數,它就代表了使用者請求,

* set方法通路到了Web應用的請求對象,并将對象屬性設定給Action的

* 成員屬性,進而實作在Action中通路Servlet對象

*/

@Override

public String execute() throws Exception {

request.setAttribute("hei","fdj");

returnsuper.execute();

publicvoid setServletRequest(HttpServletRequest arg0) {

this.request=request;

}}

2.3 借助ServletActionContext類直接通路Servlet API

ServletActionContext中的方法都是靜态方法。

publicclassLoginAction2extends ActionSupport{

public String execute() throws Exception{

//用ServletActionContext來通路Servlet API

ServletActionContext.getRequest().setAttribute("hei","nihao");