`
yupengcc
  • 浏览: 132751 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

struts2教程===在Action类中获得HttpServletResponse对象的四种方法

阅读更多

来源地址:http://www.blogjava.net/nokiaguy/archive/2008/04/22/194846.html

 

 

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学习教程

    struts2学习教程包括:第一个Struts2程序,处理一个form多个submit,struts.xml常用配置解析,使用validate方法验证数据,使用Validation框架验证数据,在Action类中获得HttpServletResponse对象的四种方法,上传...

    Struts1与Struts2本质区别

    3 Servlet依赖方面的对比:Struts 1 Action依赖于Servlet API,因为Struts 1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。Struts 2 Action不再依赖于Servlet API,从而允许Action脱离Web...

    Struts2中Servlet的配置

    1、在struts2的action中可以通过实现ServletResponseAware/ServletResquestAware接口 (org.apache.struts2.inteceptor.ServletResponseAware/ServletResquestAware)直接访问 HttpServletResponse/HttpServletRequest...

    Struts2架构剖析

    action command在穿越了一系列Struts2和XWork的拦截器之后,最后执行用户编写的Action类,在Action执行之后,响应还会穿越相同的拦截器(按照与请求相反的顺序),最后通过Struts2的HttpServletResponse转换成Web可...

    struts2的总结,适合初学者

    Struts2就是从servlet中封装以后得到的结果。 1.2Servlet的缺点 1、每写一个servlet在web.xml中都要做相应的配置。如果有多很servlet,会 导致web.xml内容过于繁多。 2、这样的结构不利于分组开发。 3、在servlet中...

    ActionContext介绍(在Struts2中)

    除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话 (Session)的一些信息, 甚至需要直接对JavaServlet Http的请求(HttpServletRequest),响应(HttpServletResponse)操作.

    POI导入导出EXCEL文件.(struts 1.x and struts2.x).doc

    struts1.x的例子,struts2.x可以参考自己修改 1.action的写法 import java.io.*; import java.sql.*; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet....

    Struts原理、开发及项目实施

    Struts的工作原理,如下图2所示: &lt;br/&gt; 控制:通过图2大家可以看到有一个XML文件Struts-config.xml,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet...

    ssh(structs,spring,hibernate)框架中的上传下载

     文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的...

    JAVA-SSH面试题

    struts1.2 Action依赖于Servlet API,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execut方法。 struts2.0 Action不依赖于容器,允许Action脱离容器单独测试。如果需要,Struts2 Action...

    超级有影响力霸气的Java面试题大全文档

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 20、abstract class和interface有什么区别? ...

    struts 标签 logic:iterate使用 logic:iterate

    我就是靠这个文档实现logic:iterate的循环的 struts 标签 logic:iterate使用 logic:iterate &lt;br&gt;第一页 是struts官方的说明, 第二页 是个例子 第三页 是我实现的arrayList放入标签的方法。 这是页面...

    java 面试题 总结

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 17、abstract class和interface有什么区别? 声明方法...

    【项目实战案例】java校园订餐系统项目(web端)

    import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import ...

    Java Oracle分页处理

    //保存一个PaginationBean的对象,用于在页面中调用其中的属性,判断页面的跳转 request.setAttribute("page", page.getPagePagination()); //用于其他页面调用PaginationBean的对象 request.getSession...

    strust文件上传

    //得到是字节数,即byte,我们可以直接用file.getFileSize(),也可以在创建读取对象时用streamIn.available(); // int ok=streamIn.available(); int ok=file.getFileSize(); String strFee = null; //这个地方...

    freemarker总结

    有一种特殊的字符串称为raw字符串,被认为是纯文本,其中的\和{等不具有特殊含义,该类字符串在引号前面加r,下面是一个例子: ${r"/${data}"year""}屏幕输出结果为:/${data}"year" 转义 含义 ...

    微信开发框架wechat4j

    如果是springmvc则创建对应的controller,如果是struts则创建对应的action类。servlet类示例如下: ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ...

    spring_MVC源码

    弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...

Global site tag (gtag.js) - Google Analytics