Struts2教程:在Action类中获得HttpServletResponse对象

开发 后端
本文为Struts2教程,本部分教你如何在Action类中获得HttpServletResponse对象。Struts2虽然在大版本号上是第二个版本,但基本上在配置和使用上已经完全颠覆了Struts1.x的方式。

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

但在Struts2 Action类中仍然有很多方法可以获得这些对象。下面就列出四种获得这些对象的方法。

【方法1】使用Struts2 Aware拦截器

这种方法需要Action类实现相应的拦截器接口。如我们要获得HttpServletResponse对象,需要实现org.apache.struts2.interceptor.ServletResponseAware接口,代码如下:

  1. package action;  
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. import javax.servlet.http.*;  
  5. import org.apache.struts2.interceptor.*;  
  6.  
  7. public class MyAction extends ActionSupport implements ServletResponseAware  
  8. {  
  9.     private javax.servlet.http.HttpServletResponse response;  
  10.     // 获得HttpServletResponse对象  
  11.     public void setServletResponse(HttpServletResponse response)  
  12.     {  
  13.         this.response = response;  
  14.     }      
  15.     public String execute() throws Exception  
  16.     {      
  17.         response.getWriter().write("实现ServletResponseAware接口");  
  18.     }  
  19. }  

在上面的代码中,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及其他的一些信息。代码如下所示:

  1. package action;  
  2.  
  3. import java.util.Map;  
  4. import org.apache.struts2.*;  
  5. import com.opensymphony.xwork2.ActionSupport;  
  6. import javax.servlet.http.*;  
  7. import com.opensymphony.xwork2.util.*;  
  8. import org.apache.struts2.interceptor.*;  
  9.  
  10. public class FirstAction extends ActionSupport implements RequestAware  
  11. {  
  12.     private Map request;  
  13. private HttpServletResponse response;  
  14.       
  15.     public void setRequest(Map request)  
  16.     {  
  17.         this.request = request;          
  18.     }      
  19.     public String execute() throws Exception  
  20.     {      
  21.         java.util.Set< String> keys = request.keySet();  
  22.         // 枚举所有的key值。实际上只有一个key:struts.valueStack  
  23.         for(String key: keys)  
  24.             System.out.println(key);  
  25.         // 获得OgnlValueStack 对象  
  26.         OgnlValueStack stack = (OgnlValueStack)request.get("struts.valueStack");  
  27.         // 获得HttpServletResponse对象  
  28.         response = (HttpServletResponse)stack.getContext().get(StrutsStatics.HTTP_RESPONSE);  
  29.         response.getWriter().write("实现RequestAware 接口");  
  30.     }  
  31. }  

我们也可以使用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");

从这四种方法来看,***一种是最简单的,读者可以根据自己的需要和要求来选择使用哪一种方法来获得这些对象。

【编辑推荐】

  1. Struts2教程:使用Validation框架验证数据
  2. Struts2教程:使用validate方法验证数据
  3. Struts2教程:struts.xml常用配置解析
  4. Struts2教程:处理一个form多个submit
  5. Struts2教程:***个Struts2程序
责任编辑:yangsai 来源: JavaEye
相关推荐

2009-02-01 10:05:00

2009-06-25 15:11:28

Struts2教程Struts2程序

2009-02-04 10:51:07

2011-08-11 13:02:43

Struts2Junit

2009-06-25 16:04:30

2009-06-03 14:19:34

Struts2Guice

2009-06-25 15:26:25

Struts2教程struts.xml常

2009-02-04 15:04:13

2009-06-25 15:54:42

Struts2教程拦截器

2009-06-25 15:50:03

Struts2教程上传任意多个文件

2009-02-04 11:37:15

2009-07-29 09:54:34

struts2和str

2009-06-25 15:33:12

Struts2教程使用validate验证数据

2009-02-04 14:19:38

2009-06-25 15:37:12

Struts2教程Validation框

2009-09-14 19:31:36

Struts1和Str

2009-02-04 14:00:59

2009-02-04 12:00:08

2009-06-25 15:59:21

Struts2教程拦截器

2009-02-04 13:13:03

点赞
收藏

51CTO技术栈公众号