struts2学习之---实现Action

来源:互联网 发布:热血屠龙翅膀进阶数据 编辑:程序博客网 时间:2024/06/11 16:13

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对象。