【方法1】使用Struts2 Aware拦截器
这种方法需要Action类实现相应的拦截器接口。如我们要获得HttpServletResponse对象,需要实现org.apache.struts2.interceptor.ServletResponseAware接口,代码如下:
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.ActionSupport;
public class MyAction extends ActionSupport implements ServletResponseAware{
private HttpServletResponse response;
//获得HttpServletResponse对象
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public String execute() throws Exception {
response.getWriter().write("aaa");
return super.execute();
}
}
方法2】使用RequestAware拦截器
这种方法和第1种方法类似。动作类需要实现一个org.apache.struts2.interceptor.RequestAware接口。所不同的 是RequestAware将获得一个com.opensymphony.xwork2.util.OgnlValueStack对象,这个对象可以获得 response、request及其他的一些信息。代码如下所示:
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.interceptor.RequestAware;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ognl.OgnlValueStack;
public class MyAction extends ActionSupport implements RequestAware {
private HttpServletResponse response;
private Map request;
@Override
public String execute() throws Exception {
Set<String> keys = request.keySet();
// 枚举所有的key值。实际上只有一个key:struts.valueStack
for (String key : keys)
System.out.println(key);
// 获得OgnlValueStack 对象
OgnlValueStack stack = (OgnlValueStack) request
.get("struts.valueStack");
// 获得HttpServletResponse对象
response = (HttpServletResponse) stack.getContext().get(
StrutsStatics.HTTP_RESPONSE);
response.getWriter().write("实现RequestAware 接口");
return super.execute();
}
public void setRequest(Map<String, Object> request) {
this.request = request;
}
}
【方法3】使用ActionContext类
这种方法比较简单,我们可以通过org.apache.struts2.ActionContext类的get方法获得相应的对象。代码如下:
import javax.servlet.http.HttpServletResponse;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class MyAction extends ActionSupport {
private HttpServletResponse response;
public MyAction() {
response = (HttpServletResponse) ActionContext.getContext().get(
"response");
}
@Override
public String execute() throws Exception {
response.getWriter().write("ActionContext");
return super.execute();
}
}
【方法4】使用ServletActionContext类
Struts2为我们提供了一种最简单的方法获得HttpServletResponse及其他对象。这就是 org.apache.struts2.ServletActionContext类。我们可以直接使用ServletActionContext类的 getRequest、getResponse方法来获得HttpServletRequest、HttpServletResponse对象。这是最简单的一种方法。代码如 下:
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class MyAction extends ActionSupport {
private HttpServletResponse response;
public MyAction() {
response = ServletActionContext.getResponse();
}
@Override
public String execute() throws Exception {
response.getWriter().write("ServletActionContext");
return super.execute();
}
}