Struts2 中 Action訪問Servlet API

1、通過ActionContext類訪問(完全解耦合的方式,使用該方法只能獲取request、session、application的Map數據的集合)

①其中獲取ActionContext對象的getParameters()方法來獲取包含所有HttpServletRequest參數信息的Map集合。

 ActionContext actionContext = ActionContext.getContext();

 Map<String, Object> map = actionContext.getParameters();

②向ActionContext對象中保存數據,如下:

public class RequestDemo1 extends ActionSupport {
    @Override
    public String execute() throws Exception {
        //一:接收參數
        // 利用Struts2中的ActionContext對象,只能獲取request、session、application的Map數據的集合
        ActionContext actionContext = ActionContext.getContext();
        /*
        * 調用getContext方法獲取頁面中的參數
        * 該方法類似於Map<String,String[]>     request.getParameterMap();
        * */
        Map<String, Object> map = actionContext.getParameters();
        for(String key:map.keySet()){
            String [] values = (String[])map.get(key);
            System.out.println("key:"+key+ Arrays.toString(values));
        }
        //二、向對象中存入數據
        actionContext.put("reqName","reqValue");//相當於requset.setAttribute();
        actionContext.getSession().put("sessName","sessValue");//相當於session.setAttribute();
        actionContext.getApplication().put("appName","appValue");
        return SUCCESS;
    }
}

2、Servlet 原生方式訪問

其中通過ServletActionContext的getRequest方法獲取HTTPServletRequest對象

ServletActionContext javax.servlet.http.HttpServletRequest request = ServletActionContext.getRequest();

/*
*可以操作作用域對象的數據,同時也可獲得對象的方法
* */
public class RequestDemo2 extends ActionSupport {
    @Override
    public String execute() throws Exception {
        //接受數據
        //直接獲取request對象 ServletActionContext
        javax.servlet.http.HttpServletRequest request = ServletActionContext.getRequest();
        Map<String, String[]> parameterMap = request.getParameterMap();
        for(String key:parameterMap.keySet()){
            String [] values = (String[])parameterMap.get(key);
            System.out.println("key:"+key+ Arrays.toString(values));
        }
        request.setAttribute("reqName","123");
        request.getSession().setAttribute("sessName","123");
        //向application中保存數據
        ServletActionContext.getServletContext().setAttribute("appName","345");

        return SUCCESS;
    }
}

3、使用接口注入的方式

通過實現ServletRequestAware獲取HttpServletRequest實例

通過實現ServletResponseAware獲取ServletResponseAware實例

通過實現SessionAware獲取HTTPSession實例

通過實現ServletContextAware獲取HttpContext實例

public class RequestDemo3 extends ActionSupport implements ServletRequestAware,ServletContextAware {
    /*通過重寫的方法獲取request、context對象*/
    private HttpServletRequest request;
    private ServletContext context;

    @Override
    public String execute() throws Exception {
        //1、接收參數
        //2.通過接口注入的方式獲得request對象
        Map<String, String[]> parameterMap = request.getParameterMap();
        for (String key : parameterMap.keySet()) {
            String[] values = parameterMap.get(key);
            System.out.println("key:" + key + Arrays.toString(values));

        }
        request.setAttribute("reqName","reqValue");
        request.getSession().setAttribute("sessName","sessValue");
        context.setAttribute("appName","appValue");
        return super.execute();
    }

    @Override
    public void setServletRequest(HttpServletRequest httpServletRequest) {
        this.request = httpServletRequest;
    }

    @Override
    public void setServletContext(ServletContext servletContext) {
        this.context = servletContext;
    }
}

三種方式中,通過ActionContext方式最爲常用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章