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"); |