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种用的比较多,也比较方便。具体怎么用还是需要根据项目实际情况选择。

转载于:https://my.oschina.net/wangzhen9005/blog/613082

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值