Struts2中在action访问Web资源,例如域对象的操作的相关方式

1 Action与Servlet解耦合的方式

  1)使用ActionContext类获取

public class TestActionContext {

    public String execute() {
        // 1.获取ActionContext对象
        // ActionContext是Action的上下文,可以从中获取当前Action的一切信息
        ActionContext actionContext = ActionContext.getContext();
        // 2.获取application对应的Map,并向其中添加一个属性
        Map<String, Object> applicationMap = actionContext.getApplication();
        applicationMap.put("applicationKey", "applicationValue");
        // 3.获取session对应的Map,并向其中添加一个属性
        Map<String, Object> sessionMap = actionContext.getSession();
        
        //session
        sessionMap.put("sessionKey", "sessionValue");

        System.out.println(sessionMap.getClass());
        if(sessionMap instanceof SessionMap){
            SessionMap sm = (SessionMap) sessionMap;
            sm.invalidate();
            System.out.println("session失效了");
        }
        
        // 4.获取request对应的Map
        Map<String, Object> requestMap = (Map<String, Object>) actionContext
                .get("request");
        requestMap.put("requestKey", "requestValue");

        // 5.获取parametersMap
        //注意:这个Map的值是字符串数组
        //这个Map只能读,不能写入数据,若要写,则不出错,也不起作用
        //getParameters()返回值是Map(String,Object),而不是Map(String,String[]);
        Map<String, Object> parametersMap = actionContext.getParameters();
        System.out.println(((String[])parametersMap.get("name"))[0]);
        parametersMap.put("age", 100);
        return "success";

    }
}

 2) 使用接口注入方式

public class TestAware implements ApplicationAware, SessionAware, RequestAware,
        ParameterAware {

    public String execute() {
        application.put("applicationKey", "applicationValue");

        request.put("requestKey", "requestValue");

        session.put("sessionKey", "sessionValue");

        System.out.println(session.getClass());

        if (session instanceof SessionMap) {
            SessionMap sm = (SessionMap) session;
            sm.invalidate();
            System.out.println("session失效了");
        }

        System.out.println(parameters.get("name")[0]);
        String[] age = { "23", "24", "26", "32", "22", "32" };
        parameters.put("age", age);
        System.out.println(parameters.get("age")[0]);
        return "success";
    }

    private Map<String, Object> application;

    public void setApplication(Map<String, Object> application) {
        // TODO Auto-generated method stub
        this.application = application;

    }

    private Map<String, Object> request;

    public void setRequest(Map<String, Object> request) {
        // TODO Auto-generated method stub
        this.request = request;
    }

    private Map<String, Object> session;

    public void setSession(Map<String, Object> session) {
        // TODO Auto-generated method stub
        this.session = session;
    }

    private Map<String, String[]> parameters;

    public void setParameters(Map<String, String[]> parameters) {
        // TODO Auto-generated method stub
        this.parameters = parameters;
    }
}

2. Action与Servlet耦合的方式

 1)使用ServletActionContext方式

public class TestServletActionContext {

    public String execute() {

        HttpServletRequest request = ServletActionContext.getRequest();

        HttpSession session = ServletActionContext.getRequest().getSession();
        ServletContext servletContext = ServletActionContext
                .getServletContext();

        System.out.println("execute...");
        
        return "success";
    }
}

 2)实现接口注入方式

public class TestServletAware implements ServletRequestAware,
        ServletContextAware, ServletResponseAware {

    public String execute() {
    
        context.setAttribute("contextKey", "contextValue");
        System.out.println(context.getAttribute("date"));
        return "success";
    }

    //ServletContext 对应Application
    private ServletContext context;

    public void setServletContext(ServletContext context) {
        this.context = context;

    }

    private ServletRequest request;

    public void setServletRequest(HttpServletRequest request) {
        // TODO Auto-generated method stub
        this.request = request;
    }

    private ServletResponse response;

    public void setServletResponse(HttpServletResponse response) {
        // TODO Auto-generated method stub
        this.response = response;
    }
}

 

简单的写了相关测试代码

 

posted @ 2018-01-17 21:23  ___struggle  阅读(202)  评论(0编辑  收藏  举报