在struts2中有两种方式可以得到这些对象,一般有两种方式,一种是利用Ioc实现拦截器接口,一种是使用静态类。分布如下
第一种方式,非IoC方式,使用ActionContext类和ServletActionContext类,例如
HttpServletResponse response(HttpServletResponse) = ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE); HttpServletRequest request(HttpServletRequest) = } ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
HttpServletResponse response = ServletActionContext.getResponse() response.getWriter().write("hello world");
第二种就是使用Ioc的方式,实现ServletResponseAware、ServletRequestAware、SessionAware和CookiesAware等接口。例子如下
import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.*; import org.apache.struts2.interceptor.*; public class MyAction extends ActionSupport implements ServletResponseAware{ private javax.servlet.http.HttpServletResponse response; // 获得HttpServletResponse对象 public void setServletResponse(HttpServletResponse response){ this.response = response; } public String execute() throws Exception { response.getWriter().write("实现ServletResponseAware接口"); }
import java.util.Map; import org.apache.struts2.*; import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.*; import com.opensymphony.xwork2.util.*; import org.apache.struts2.interceptor.*; public class FirstAction extends ActionSupport implements RequestAware{ private Map request; private HttpServletResponse response; public void setRequest(Map request){ this.request = request; } public String execute() throws Exception { java.util.Set<String> keys = request.keySet(); // 枚举所有的key值。实际上只有一个key:struts.valueStack for(String key: keys) System.out.println(key); // 获得OgnlValueStack 对象 OgnlValueStack stack = (OgnlValueStack)myRequest.get("struts.valueStack"); // 获得HttpServletResponse对象 response =(HttpServletResponse)stack.getContext().get(StrutsStatics.HTTP_RESPONSE); response.getWriter().write("实现RequestAware 接口"); } }