Struts2 - 在Action类中获得HttpServletResponse对象

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

Struts2 - 在Action类中获得HttpServletResponse对象相关推荐

  1. 在Action类中获得HttpServletResponse对象的四种方法

    Struts2:在Action类中获得HttpServletResponse对象的四种方法 在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和req ...

  2. Struts2教程6:在Action类中获得HttpServletResponse对象的四种方法

    在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和request.而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得H ...

  3. Struts2中XXX.Action类中方法的访问(三种方式)

    第一种:使用action标签的method属性(常规方法) Action类: package cn.tedu.web;import org.springframework.context.annota ...

  4. Java反射之Filed(类中的属性对象)

    通过反射机制获取类中的属性对象. 1.获取类中所有的public属性(包括父类):getFields(): public class TestFiled {class A{public int age ...

  5. Android中怎样在工具类中获取Context对象

    场景 Android程序中访问资源时需要提供Context,一般来说只有在各种component中(Activity, Provider等等)才能方便的使用api来获取Context对象, 如果在编写 ...

  6. 一个action类中写多个方法需要继承MappingDispatchAction

    原本action里只有一个默认execute方法,今天我在action里增加了方法后发现页面卡死无法跳转了,原来如果写多个方法要继承DispatchAction类. 一个action中有一个execu ...

  7. spring boot整合Quartz 在Job类中注入其他对象报空指针异常java.lang.NullPointerException at com.sxt.quartz.QuartzDemo.e

    情况在Job 类中注入RedisTemplate 报空指针异常 原因:我们使用JobDetailFactoryBean 帮我们创建对象 实际上调用的是AdaptableJobFactory 下的这个方 ...

  8. java在类中创建自己对象_java 在类中创建自己的对象

    public class A() { int yy=0; public static void main(String[] agrs) { A aa=new A(); } } 我想知道的是,A是一个类 ...

  9. java类中声明log对象_用于Android环境,java环境的log打印,可打印任何类型数据

    LogXixi 用于Android环境,java环境的log打印,可打印任何类型数据,根据android项目环境debug环境自动打开,release环境自动关闭android环境log打印,规范be ...

最新文章

  1. 微信有电脑客户端吗_如何在一个电脑上登录多个微信号
  2. 词频-逆向文件频率TF-IDF构建实战
  3. 最新必读图神经网络论文
  4. js 字符串删除首尾_JavaScript trim 实现去除字符串首尾指定字符的简单方法
  5. seata分布式事务框架原理
  6. 常用正则表达式和shell命令列表
  7. 我太难了!男子打赏女主播被骗9.6万,求助“好心人”再度被骗...
  8. 【Http】Apache HttpClient 4.5实现https
  9. java读取bny_java转义字符
  10. 安卓3.0之后的网络访问问题
  11. 51nod 1256 扩展欧几里得
  12. 造梦西游外传服务器维护,造梦西游外传V3.5.9版本更新公告 “无限火力”限时开放...
  13. There is no getter for property named 'userId' in 'class java.lang.String'
  14. Delphi7 sn
  15. jeecms v9图标不显示问题
  16. 【Android】使用deviceowner 配置手机设置 (Monkey自动化测试删去状态栏、设定输入法、静音、APP自动权限授予、Kiosk模式打开)
  17. 3D游戏编程 作业六 打飞碟改进
  18. 深信服2008校园招聘笔试题
  19. 黑盒测试的原理及内容
  20. Android 在应用图标上设置未读消息数量

热门文章

  1. 淡入淡出效果 || 高亮显示案例
  2. 用javascript伪造太阳系模型系统
  3. HTML5 Canvas 旋转
  4. Regex解析字符串
  5. 思维导图 - 测试技术扩展:Postman接口测试、Sonar白盒测试、Sonic移动测试、Python操作FTP服务器
  6. Python 技术篇-使用time库获取秒级时间戳、毫秒级时间戳实例演示
  7. 查找数组中第K个最小值
  8. ueditor百度编辑器常见报错的解决方法
  9. CTFshow 命令执行 web122
  10. 4.5 matlab三维曲面(mesh、fmesh、meshc、meshz、surf、fsurf、surfc、surfl)