Struts2的Action并未直接与任何Servlet API偶合,这也是Struts2的一个改良的地方。但如何进行访问?


方法一:.[一般推荐使用](只能获得request,而response则得不到)
Struts2提供了一个ActionContext类,Struts2中的Action可以通过它进行访问。
其方法有:get(),getApplication(),getContext(),getParameters(),getSession(),setApplication(),setSession()

/**
 * @作者 Jcuckoo
 * @创建日期 2008-12-02
 * @版本 V 1.0
 */

public class LoginAction implements Action {
  private String username;
  private String password;

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  public String execute() throws Exception {
    // 获取静态方法,获取系统的ActionContext实例
    ActionContext ctx = ActionContext.getContext();
    // 返回一个Map对象,该对象模拟了该应用的application实例
    Integer counter = (Integer) ctx.getApplication().get("counter");
    if (counter == null) {
      counter = 1;
    } else {
      counter = counter + 1;
    }
    // 向application添加属性
    ctx.getApplication().put("counter", counter);
    // 向session添加属性
    ctx.getSession().put("user", getUsername());
    if (getUsername().equals("scott") && getPassword().equals("tiger")) {
      ctx.put("tip", "服务器提示:您已经成功的登陆");
      return SUCCESS;
    } else {
      ctx.put("tip", "服务器提示:登陆失败");
      return ERROR;
    }
  }
}



方法二:[不推荐](麻烦,与servlet API 耦合大).

虽然Struts2提供了 ActionContext来访问Servlet API,但这种访问毕竟不能直接获得Servlet API,为了在Action中直接访问Servlet API,Struts2还提供了一下接口:ServletContextAware,ServletRequestAware,ServletResponseAware
下面以ServletResponseAware为例。
/**
 * @作者 Jcuckoo
 * @创建日期 2008-12-02
 * @版本 V 1.0
 */
// 实现ServletResponseAware
public class LoginAction implements Action, ServletResponseAware {
  // 需要访问的HttpServletResponse对象
  private HttpServletResponse response;
  private String username;
  private String password;

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  // 实现ServletResponseAware接口必须实现的方法
  public void setServletResponse(HttpServletResponse response) {
    this.response = response;
  }

  public String execute() throws Exception {
    Cookie c = new Cookie("user", getUsername());
    c.setMaxAge(60 * 60);
    response.addCookie(c);
    return SUCCESS;
  }
}



方法三:强烈推荐使用

Struts2还提供了一个ServletActionContext,其静态方法有:getPageContext(),getRequest(),getResponse(),getServletContext()
 
HttpServletRequest request = ServletActionContext.getRequest(); 
 HttpServletResponse response = ServletActionContext.getResponse(); 
 request.getSession().setAttribute("username","admin"); 
 request.setAttribute("password", "1234");


from: http://blog.csdn.net/guoquanyou/archive/2008/12/02/3431164.aspx
快乐渡过每一天,减肥坚持每一天