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方式最为常用。

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