在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 接口");
}
}
</string>
