Struts2 访问 Servlet API
在Struts2中,Action 已经与 Servlet API 完全分离,但我们在实现业务逻辑时,经常要访问Servlet 中的对象,如session,application等。
在Struts2 框架中访问 Servlet API 有如下几种方法:
一.通过 ActionContext 类访问
ActionContext(com.opensymphony.xwork.ActionContext)是Action执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个Map而已),它存放的是Action在执行时需要用到的对象, 一般情况, 我们的ActionContext都是通过:
ActionContext context = (ActionContext) actionContext.get();来获取的
通过ActionContext取得HttpSession方法如下:
Map session =ActionContext.getContext().getSession();
代码列:
public String execute() {
if("admin".equals(user.getUsername())&&"123".equals(user.getPassword())){
return SUCCESS;
}
1.第一种
//节耦 得到是map
Map<String, Object> requset= (Map<String, Object>) ActionContext.getContext().get("request");
requset.put("msg", "用户名或密码错误!");
2.第二种
Map<String, Object> session = ActionContext.getContext().getSession();
session.put("msg", "用户名或密码错误!");
//得到rquest对象
3.第三种
HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
request.setAttribute("msg", "用户名或密码错误!!");
return LOGIN;
}
二.通过 ServletActionContext 类直接访问
public String execute() {
if("admin".equals(user.getUsername())&&"123".equals(user.getPassword())){
return SUCCESS;
}
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("msg", "用户名或密码错误!!");
return LOGIN;
}
三.通过特定的xxxAware接口访问
public class LoginAction2 extends ActionSupport implements ServletRequestAware,ServletContextAware,ServletResponseAware {
/**
*
*/
private static final long serialVersionUID = 1L;
private User user;
private HttpServletRequest request;
public String execute() {
if("admin".equals(user.getUsername())&&"123".equals(user.getPassword())){
return SUCCESS;
}
request.setAttribute("msg", "用户名或密码错误!!");
return LOGIN;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
@Override
public void setServletResponse(HttpServletResponse arg0) {
// TODO Auto-generated method stub
}
@Override
public void setServletContext(ServletContext arg0) {
// TODO Auto-generated method stub
}
}