8.ActionContext类与Servlet API解耦的访问方式
为了避免与Servlet API耦合在一起,方便Action类做单元测试,
Struts2对HttpServletRequest、HttpSession和ServletContext进行了封装,
构造了三个Map对象来替代这三种对象,在Action中,
直接使用HttpServletRequest、HttpSession、ServletContext对应的Map对象来保存和读取数据。
要获得这三个Map对象,可以使用com.opensymphony.xwork2.ActionContext类
* . ActionContext - 请求上下文 。- 就是struts2封装的request.
包含了request,session,application
上面这三个都是Map.
* . ServletActionContext - 包含servletApi的请求上下文。包含了request,response,session,applicatoin都是servlet的类
示例:: public class MyAction extends ActionSupport implements ModelDriven<User>{ @Override public String execute() throws Exception { System.err.println("这是基本的实现"+this.user); //获取request ActionContext req = ActionContext.getContext(); //-----------------------获取request req.put("addr","中国北京");//放request //获取session Map<String,Object> session = req.getSession(); session.put("addr", "中国上海"); //获取application Map<String,Object> app = req.getApplication(); app.put("age",90); //以下通过ServletActionContext对象,获取原生的ServletAPI HttpServletRequest requ = ServletActionContext.getRequest(); requ.setAttribute("email","aaa"); requ.getSession().setAttribute("height", "180"); return "success"; } private User user = new User(); public User getModel() { return user; } }