struts2 获取request response

 
 
struts1 . x Action 类的 execute 方法中,有四个参数,其中两个就是 response request 。而在 Struts2 中,并没有任何参数,因此,就不能简单地从 execute 方法获得 HttpServletResponse HttpServletRequest 对象了。
但在 Struts2 Action 类中仍然有很多方法可以获得这些对象。下面就列出四种获得这些对象的方法。
【方法 1 】使用 Struts2 Aware 拦截器
这种方法需要 Action 类实现相应的拦截器接口。如我们要获得 HttpServletResponse 对象,需要实现 org . apache . struts2 . interceptor . ServletResponseAware 接口,代码如下:
package action ;
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接口" );
}
}
在上面的代码中, MyAction 实现了一个 ServletResponseAware 接口,并且实现了 setServletResponse 方法。如果一个动作类实现了 ServletResponseAware 接口, Struts2 在调用 execute 方法之前,就会先调用 setServletResponse 方法,并将 response 参数传入这个方法。如果想获得 HttpServletRequest HttpSession Cookie 等对象,动作类可以分别实现 ServletRequestAware SessionAware CookiesAware 等接口。这些接口都在 org . apache . struts2 . interceptor 包中。
如果要获得请求参数,动作类可以实现 org . apache . struts2 . interceptor . ParameterAware 接口,但如果只想判断某个参数是否存在,也可以实现 com . opensymphony . xwork2 . interceptor . ParameterNameAware 接口。这个接口有一个 acceptableParameterName 方法,当 Struts2 获得一个请求参数时,就会调用一次。读者可以在这个方法中将所有的请求参数记录下来,以便以后使用。这个方法的定义如下:
boolean acceptableParameterName ( String parameterName );
【方法 2 】使用 RequestAware 拦截器
这种方法和第 1 种方法类似。动作类需要实现一个 org . apache . struts2 . interceptor . RequestAware 接口。所不同的是 RequestAware 将获得一个 com . opensymphony . xwork2 . util . OgnlValueStack 对象,这个对象可以获得 response request 及其他的一些信息。代码如下所示:
package action ;
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 ) request . get ( "struts.valueStack" );
// 获得HttpServletResponse对象
response = ( HttpServletResponse ) stack . getContext (). get ( StrutsStatics . HTTP_RESPONSE );
response . getWriter (). write ( "实现RequestAware 接口" );
}
}
我们也可以使用 StrutsStatics . HTTP_REQUEST StrutsStatics . PAGE_CONTEXT 来获得 HttpServletRequest PageContext 对象。这种方法有些麻烦,一般很少用,读者可以作为一个参考。
【方法 3 】使用 ActionContext
这种方法比较简单,我们可以通过 org . apache . struts2 . ActionContext 类的 get 方法获得相应的对象。代码如下:
HttpServletResponse response = ( HttpServletResponse )
ActionContext . getContext (). get ( org . apache . struts2 . StrutsStatics . HTTP_RESPONSE );
HttpServletRequest request = ( HttpServletRequest )
ActionContext . getContext (). get ( org . apache . struts2 . StrutsStatics . HTTP_REQUEST );
【方法 4 】使用 ServletActionContext
Struts2 为我们提供了一种最简单的方法获得 HttpServletResponse 及其他对象。这就是 org . apache . struts2 . ServletActionContext 类。我们可以直接使用 ServletActionContext 类的 getRequest getResponse 方法来获得 HttpServletRequest HttpServletResponse 对象。代码如下:
HttpServletResponse response = ServletActionContext . getResponse ()
response . getWriter (). write ( "hello world" );
从这四种方法来看,最后一种是最简单的,读者可以根据自己的需要和要求来选择使用哪一种方法来获得这些对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值