Struts2有四种方式获取Web中 request、session、application 的方式。

1、通过实现ServletRequestAware 接口通过IOC机制注入request(此方法最麻烦,不推荐使用)

/**
 * 通过实现ServletXxxAware 接口的方式可以由Struts2注入(setter方法)需要的Servlet 相关的对象
 * ServletRequestAware:注入HttpServletRequest对象
 * ServletContextAware:注入ServletContext对象(较常用)
 * ServletResponseAware:注入HttpServletResponse对象
 *
 */
public class TestServletAwareAction implements ServletRequestAware,ServletContextAware,ServletResponseAware{
    
    public String execute() {
        System.out.println("ServletContext:"+context);
        return "success";
    }
    private ServletContext context;
    @Override
    public void setServletContext(ServletContext context) {
         System.out.println(context);
         this.context = context;
    }

    @Override
    public void setServletRequest(HttpServletRequest request) {
        System.out.println(request);
    }

    @Override
    public void setServletResponse(HttpServletResponse response) {
        System.out.println(response);
    }
        
}

 

2、实现RequestAware、SessionAware、ApplicationAware接口,通过IOC机制来注入三个Map

public class TestAwareAction  implements ApplicationAware,SessionAware,RequestAware,ParameterAware{
        public String execute(){
            //1.向application中加入一个属性:applicationKey2    -    applicationValue2
            application.put("applicationKey2", "applicationValue2");
            //2.从application中读取一个属性 date,并打印
            System.out.println("时间"+application.get("date"));
            
            //下面这些方法的用法同上
            session.put("sessionKey2", "sessionValue2");
            request.put("requestKey2", "requestValue2");
            
            //获取请求参数
            System.out.println("参数:"+parameters.get("name")[0]);
            
            return "success";
        }
        private Map<String,Object> application;
        private Map<String,String[]> parameters;
        private Map<String,Object> request;
        private Map<String,Object> session;
        
        @Override
        public void setApplication(Map<String, Object> application) {
                this.application = application;
        }


        @Override
        public void setParameters(Map<String, String[]> parameters) {
            this.parameters = parameters;
            
        }


        @Override
        public void setRequest(Map<String, Object> request) {
            this.request = request;
            
        }


        @Override
        public void setSession(Map<String, Object> session) {
            this.session = session;
            
        }
}

 

3、使用ServletActionContext类(此方法与Servlet耦合)

/**
 * 和Servlet API耦合的方式获取WEB资源
 * 使用ServletActionContext可以从中获取到当前Action 对象需要的一切 Servlet API 相关的对象。
 *  常用的方法:
 *  1.获取HttpServletRequest:ServletActionContext.getRequest();
 *  2.获取HttpSession:ServletActionContext.getRequest().getSession();
 *  3.获取ServletContext:ServletActionContext.getServletContext();
 */
public class TestServletActionContextAction {
        
    public String execute() {
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = ServletActionContext.getRequest().getSession();
        ServletContext servletContext = ServletActionContext.getServletContext();
        System.out.println("execute...");
        return "success";
    }
}

 

4、使用ActionContext类(此方法与Servlet解耦,推荐使用)

/**
 * 解耦的方式获取WEB资源
 * 使用ActionContext
 *
 */
public class TestActionContextAction { 
    
    public String execute() {
        //0.获取ActionContext对象,是Action的上下文对象,
                //  可以从中获取到当前Action需要的一切信息
        ActionContext actionContext = ActionContext.getContext();
        
        //1.通过调用ActionContext对象的getApplication()方法获取application 对应的 Map,
                //    并向其中添加一个属性    
        Map<String,Object> applicationMap = actionContext.getApplication(); 
        //添加属性
        applicationMap.put("applicationKey", "applicationValue");
        //获取属性
        System.out.println(applicationMap.get("applicationKey"));
        
        //2.session
        Map<String,Object> sessionMap = actionContext.getSession();
        sessionMap.put("sessionKey", "sessionValue");
        
        //3.request
                //ActionContext中并没有提供getRequest方法来获取request对应的Map,
                //需要手动调用get()方法传入request字符串来获取
        Map<String,Object> requestMap = (Map<String, Object>)                 
                actionContext.get("request");
        requestMap.put("requestKey", "requestValue");
        
        //4.获取请求参数对应的Map,并获取指定的参数值
        //键:请求参数的名字,值:请求参数的值对应的字符串数组
        //注意:①getParameters的返回值为Map<String,Object>,而不是Map<String,String[]>
        //      ②parameters 这个Map只能读,不能写入数据
        Map<String,Object> parameters = actionContext.getParameters();
        System.out.println(((String[])parameters.get("name"))[0]);    //atguigu
        return "success";
    }
}

 

posted on 2018-05-09 12:59  FuYingju  阅读(62)  评论(0编辑  收藏  举报