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