Action是应用的核心,Action类里包含了对用户请求的处理逻辑,Action类也被称为业务控制器。
struts2通常直接使用Action类来封装HTTP请求参数,因此,Action类里还应该包含于请求参数对应的实例变量,并且为这些实例变量提供对应的setter和getter方法。execute()方法是处理用户请求的逻辑控制方法。
Action类里不仅可以封装请求参数,还可用于封装处理结果。如果希望服务器提示的”登录成功”等在下一个页面输出,那么可以在Action类中增加一个tip实例变量。提供对应的setter和getter方法。一旦设置了tip实例变量的值就可以输出该实例变量的值:<s:property value="tip"/>
ActionSupport类是Struts2默认的Action处理类,如果让开发者的Action类继承该ActionSupport类,则会大大简化Action的开发。
1.Action访问Servlet API
struts2提供了一个ActionContext类,Action可通过该类访问Servlet API。
- Object get(Object key):该方法类似于调用HttpServletRequest的getAttribute(String name)方法。
- Map getApplication():返回一个Map对象,该对象模拟了该应用的ServletContext实例。
- static ActionContext getContext():静态方法,获取系统的ActionContext实例。
- Map getParameters():获取所有的请求参数。类似于调用HttpServletRequest对象的getParameterMap()方法。
- Map getSession():返回一个Map对象,该Map对象模拟了HttpSession实例。
- void setApplication(Map application):直接传入一个Map实例,将该Map实例里的key-value对象转换成application的属性名和属性值。
- void setSession(Map session)::直接传入一个Map实例,将该Map实例里的key-value对象转换成session的属性名和属性值。
2.Action直接访问Servlet API
为了让Action直接访问Servlet API ,struts2提供了如下几个接口:
- ServletContextAware:实现该接口的Action可以直接访问Web应用的ServletContext实例。
- ServletRequestAware:实现该接口的Action可以直接访问用户请求的HttpServletRequest实例。
- ServletResponseAware:实现该接口的Action可以直接访问服务器响应的HttpServletResponse实例。
public class LoginAction implements ServletResponseAware{
private HttpServletResponse response;
public void setServletResponse(HttpServletResponse response){
this.response = response;
}
}
3.使用ServletActionContext访问Servlet API
为了直接访问Servlet API ,struts2还提供了一个ServletActionContext工具类,这个类包含如下几个静态方法:
- static PageContext getPageContext():取得Web应用的PageContext对象。
- static HttpServletRequest getRequest():取得Web应用的HttpServletRequest对象。
- static HttpServletResponse getResponse():取得Web应用的HttpServletResponse对象。
- static HttpServletRequest getServletContext():取得Web应用的ServletContext对象。