java之struts2之ServletAPI
在之前的学习中struts2已经可以处理大部分问题了。但是如果要将用户登录数据存入session中,可以有两种方式开存入ServletAPI。
一种解耦合方式,一种耦合方式。
1. 解耦合方式
解耦合方式---ActionContext : 解耦合方式获取的都是map对象
1 //登录 2 public String login(){ 3 if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){ 4 //登录成功 数据存入Session中 5 //通过ActionContext可以获得Session 6 Map<String,Object> session = ActionContext.getContext().getSession(); 7 session.put("currentUser", user); 8 /** 9 * 通过解耦合的方式还可以获取request,application 10 */ 11 Map<String,Object> request = (Map<String, Object>) ActionContext.getContext().get("request"); 12 Map<String,Object> application = ActionContext.getContext().getApplication(); 13 return Action.SUCCESS; 14 } 15 return Action.LOGIN; 16 }
好处:方便测试,没有侵入性,ActionContext可以不在Servlet容器环境中使用
2.耦合方式获取ServletAPI
下面讲的是耦合方式获取的Servlet对象
2.1 通过ActionContext获取
//登录 public String login(){ if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){ //登录成功 数据存入Session中 /** * 通过ActionContext对象获取HttpServletRequest对象 */ HttpServletRequest req = (HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST); HttpSession session = req.getSession(); session.setAttribute("currentUser", user); /** * 在ActionContext中还可以获取HttpServletResponse对象 * 和ServletContext对象 */ HttpServletResponse resp = (HttpServletResponse)ActionContext.getContext().get(StrutsStatics.HTTP_RESPONSE); ServletContext sc =(ServletContext)ActionContext.getContext().get(StrutsStatics.SERVLET_CONTEXT); return Action.SUCCESS; } return Action.LOGIN; }
2.2 通过ServletActionContext获取
//登录 public String login(){ if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){ //登录成功 数据存入Session中 //通过ServletActionContext以耦合方式获取ServletAPI对象 HttpServletRequest req = ServletActionContext.getRequest(); HttpSession session = req.getSession(); session.setAttribute("currentUser", user); /** * 通过ServletActionContext工具类还可以获取到其他的ServletAPI对象 */ HttpServletResponse resp = ServletActionContext.getResponse(); ServletContext sc = ServletActionContext.getServletContext(); return Action.SUCCESS; } return Action.LOGIN; }
2.3 通过实现接口的方式来获取
public class UserAction4 implements ServletRequestAware{ private User user; private HttpServletRequest req; @Override public void setServletRequest(HttpServletRequest request) { this.req = request; } //登录 public String login(){ if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){ //登录成功 数据存入Session中 //通过ServletActionContext以耦合方式获取ServletAPI对象 HttpSession session = this.req.getSession(); session.setAttribute("currentUser", user); return Action.SUCCESS; } return Action.LOGIN; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }