Action类包含了对用户请求的逻辑处理,因此将Action称作业务控制器。

1 编写Action的实现类

Struts 2Action采用低侵入式,不要求实现任何类或接口,完全是一个普通的POJO(Plain Ordinary Java Objects简单的Java对象),有很好的复用性。

Struts 2通常直接使用Action来封装HTTP请求参数,因此需为Action中的属性添加getter()/setter()方法。

1.1 实现Action接口以规范Action类的开发

Struts 2 提供了一个Action接口,定义了Struts 2Action应该实现的规范。

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 2Action并未与Servlet API进行耦合,对于Web控制器而言,必须访问Action

Struts 2提供ActionContext类来访问Servlet API。通常要访问的Servlet APIHttpSessionHttpServletRequestServletContext,分别对应JSP内置对象sessionrequestapplication

2.2 实现xxxAware接口直接访问Servlet API

虽然ActionContext可以访问Servlet API ,但毕竟不能直接获得Servlet API实例。为了使Struts 2能直接访问到Servlet API的实例,提供了接口:ServletContextAwareServletRequestAwareServletResponseAware

例如:

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

}

}