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