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;
            }
        }

 

posted @ 2013-02-13 17:54  一灵  阅读(472)  评论(0编辑  收藏  举报