Action类包含了对用户请求的逻辑处理,因此将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.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"); returnsuper.execute(); } } |