后两种方式在底层也是通过第一种方式(ActionContext)实现的。
Demo1Action.java(方式一:通过ActionContext获取,常用):
package cn.xxx.demo;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
//如何在Action中获得原生Servlet的API
public class Demo1Action extends ActionSupport {
public String execute() throws Exception {
// 获取request域对象 => map (struts2并不推荐使用原生request域)(不推荐)
Map<String, Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request");
// 推荐 (ActionContext也是一个域对象,且和request域对象生命周期相同;因此推荐使用ActionContext域代替request域对象)
ActionContext.getContext().put("name", "requestTom"); // 域对象 => Map类型。 el表达式 获取值${requestScope.name} (和从request域中获取方式一样)。
// 获取session域对象 => map
Map<String, Object> sessionScope = ActionContext.getContext().getSession();
sessionScope.put("name", "sessionTom");
// 获取application域对象 => map
Map<String, Object> applicationScope = ActionContext.getContext().getApplication();
applicationScope.put("name", "applicationTom");
return SUCCESS;
}
}
Demo2Action.java(方式二:通过ServletActionContext获取):
package cn.xxx.demo;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
//如何在Action中获得原生Servlet的API
public class Demo2Action extends ActionSupport {
//并不推荐(Action和Servlet API耦合严重)
public String execute() throws Exception {
// 获取原生request对象
HttpServletRequest request = ServletActionContext.getRequest();
// 获取原生session
HttpSession session = request.getSession();
// 获取原生response
HttpServletResponse response = ServletActionContext.getResponse();
// 获取原生servletContext
ServletContext servletContext = ServletActionContext.getServletContext();
return SUCCESS;
}
}
Demo3Action.java(方式三:通过特定接口获取):
package cn.xxx.demo;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
//如何在Action中获得原生Servlet的API
public class Demo3Action extends ActionSupport implements ServletRequestAware,ServletResponseAware,SessionAware,ApplicationAware {
private HttpServletRequest request;
private HttpServletResponse response;
public String execute() throws Exception {
System.out.println("原生request:"+request);
return SUCCESS;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public void setApplication(Map<String, Object> arg0) {
// .....
}
@Override
public void setSession(Map<String, Object> arg0) {
// .....
}
}