Struts2 Action中获取request对象的方法

在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和request。而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得HttpServletResponse或HttpServletRequest对象了。
  但在Struts2 Action类中仍然有很多方法可以获得这些对象。下面就列出四种获得这些对象的方法。

使用Struts2 Aware拦截器

这种方法需要Action类实现相应的拦截器接口。如我们要获得HttpServletResponse对象,需要实现org.apache.struts2.interceptor.ServletResponseAware接口,代码如下:
01 importcom.opensymphony.xwork2.ActionSupport;
02 importjavax.servlet.http.*;
03 importorg.apache.struts2.interceptor.*;
04  
05 publicclass MyAction extendsActionSupport implementsServletResponseAware
06 {
07    privatejavax.servlet.http.HttpServletResponse response;
08    // 获得HttpServletResponse对象
09    publicvoid setServletResponse(HttpServletResponse response)
10    {
11         this.response = response;
12    }   
13    publicString execute() throwsException
14    {   
15         response.getWriter().write("实现ServletResponseAware接口");
16    }
17 }
使用RequestAware拦截器
这种方法和第1种方法类似。动作类需要实现一个org.apache.struts2.interceptor.RequestAware接口。所不同的是RequestAware将获得一个com.opensymphony.xwork2.util.OgnlValueStack对象,这个对象可以获得response、request及其他的一些信息。代码如下所示:
01 importjava.util.Map;
02 importorg.apache.struts2.*;
03 importcom.opensymphony.xwork2.ActionSupport;
04 importjavax.servlet.http.*;
05 importcom.opensymphony.xwork2.util.*;
06 importorg.apache.struts2.interceptor.*;
07  
08 publicclass FirstAction extendsActionSupport implementsRequestAware
09 {
10    privateMap request;
11    privateHttpServletResponse response;
12     
13    publicvoid setRequest(Map request)
14    {
15         this.request = request;        
16    }   
17    publicString execute() throwsException
18    {   
19         java.util.Set<String> keys = request.keySet();
20         // 枚举所有的key值。实际上只有一个key:struts.valueStack
21         for(String key: keys)
22             System.out.println(key);
23         // 获得OgnlValueStack 对象
24         OgnlValueStack stack = (OgnlValueStack)request.get("struts.valueStack");
25         // 获得HttpServletResponse对象
26         response = (HttpServletResponse)stack.getContext().get(StrutsStatics.HTTP_RESPONSE);
27         response.getWriter().write("实现RequestAware 接口");
28    }
29 }



使用ActionContext类
这种方法比较简单,我们可以通过org.apache.struts2.ActionContext类的get方法获得相应的对象。代码如下:
1 HttpServletResponse response = (HttpServletResponse)ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);
2 HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
使用ServletActionContext类
Struts2为我们提供了一种最简单的方法获得HttpServletResponse及其他对象。这就是org.apache.struts2.ServletActionContext类。我们可以直接使用ServletActionContext类的getRequest、getResponse方法来获得HttpServletRequest、HttpServletResponse对象。代码如下:
1 HttpServletResponse response = ServletActionContext.getResponse();
2   response.getWriter().write("hello world");
总结:从这四种方法来看,最后一种是最简单的,读者可以根据自己的需要和要求来选择使用哪一种方法来获得这些对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值