struts2的action中获得request response session 对象

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

Post a Comment