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