Action中获取request、response、session

        在使用struts2时,经常需要操作HttpServletRequest、HttpServletResponse、HttpSession对象,下面就说说几种获取这几种对象的方法。

        1.使用ServletActionContext类

        struts2为我们提供了一种最简单的方法获得以上三种对象及其他对象。这就是 org.apache.struts2.ServletActionContext类。我们可以直接使用ServletActionContext类的 getRequest、getResponse方法来获得HttpServletRequest、HttpServletResponse对象,进一步通过HttpServletRequest对象来获取HttpSession对象。代码如下:

package com.common.action;
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;
public class StrutsAction extends ActionSupport  {
 
 /**
  * 序列号
  */
 private static final long serialVersionUID = -6685470801863042575L;
 
 protected HttpServletRequest request= ServletActionContext.getRequest();
 
 protected HttpServletResponse response= ServletActionContext.getResponse();
  
 protected HttpSession session=request.getSession();
}

          2.实现struts2 Aware接口

          这种方法需要action实现相应的拦截器接口,代码如下。

package com.common;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
public class StrutsAction extends ActionSupport 
implements  SessionAware, ServletRequestAware, ServletResponseAware
{
  protected HttpServletRequest request=null;
  
  protected HttpServletResponse response=null;  
    
  protected HttpSession session=null;
  
  public void setServletRequest(HttpServletRequest arg0) 
    {
  this.request=arg0;
  this.session=this.request.getSession();
 }
    
 public void setServletResponse(HttpServletResponse arg0) 
 {
  this.response=arg0;  
 }
 
 public void setSession(Map arg0) 
 {
  
 }
 
}

      3.实现Request Aware接口

      该方法与第二种类似,动作类需要实现一个org.apache.struts2.interceptor.RequestAware接口。所不同的是RequestAware将获得一个com.opensymphony.xwork2.util.OgnlValueStack对象,这个对象可以获得response、request及其他的一些信息。代码如下所示:

package com.common;
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 StrutsAction extends ActionSupport implements RequestAware
{
 private Map map;
 private HttpServletResponse response;
 private HttpServletRequest request;
 private HttpSession session;
 public void setRequest(Map map)
 {
  this.map = map;
 }
 public String execute() throws Exception
   {    
       java.util.Set<String> keys = map.keySet();
       //枚举所有的key值。实际上只有一个key:struts.valueStack
       for(String key: keys)
       System.out.println(key);
       //获得OgnlValueStack 对象
       OgnlValueStack stack =(OgnlValueStack)map.get("struts.valueStack");
       //获得HttpServletResponse对象
       response =(HttpServletResponse)stack.getContext().get(StrutsStatics.HTTP_RESPONSE);
       request =(HttpServletRequest)stack.getContext().get(StrutsStatics.HTTP_REQUEST);
       session = request.getSession();
       return null;
   }
}

         4.  使用ActionContext类

         该方法与第1中类似,我们可以通过org.apache.struts2.ActionContext类的get方法获得相应的对象。代码如下:

package com.common;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class StrutsAction extends ActionSupport
{
 private HttpServletResponse response;
 private HttpServletRequest request;
 private HttpSession session;
 public String execute() throws Exception
   {    
    ActionContext actionContext = ActionContext.getContext();  
       response =(HttpServletResponse) actionContext.get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);
       request =(HttpServletRequest)actionContext.get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
       session = request.getSession();
       return null;
   }

}

  这4种方式,一般第1种、第2种用的比较多,也比较方便。具体怎么用还是需要根据项目实际情况选择。

你可能感兴趣的:(request,struts,action)