`
王_辉
  • 浏览: 28732 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts2获取HttpServletRequest

阅读更多

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

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

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

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



<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->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及其他的一些信息。代码如下所示:


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->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");

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

分享到:
评论
1 楼 当当猫 2010-05-19  
写的挺全面,学习的挺深入

相关推荐

    Struts2获取request的四种方式

    在Struts2中,经常需要从Action类中获取请求(Request)和响应(Response)对象来处理用户请求和传递数据。本文将详细解释Struts2中获取Request对象的四种不同方式。 1. **Servlet不相关的非IoC取得Request等对象的...

    struts2中request和session的获取

    在Struts2框架中,对request和session的管理和获取是实现Web应用中用户交互和状态维护的重要手段。本文将深入探讨Struts2中如何获取request和session,以及这两种对象的作用和应用场景。 ### Struts2框架简介 ...

    struts2中获得request对象

    以上就是在Struts2中获取`HttpServletRequest`对象的几种常见方法。选择哪种方法取决于你的具体需求,例如,如果你需要在拦截器中处理请求,那么使用Interceptor方法更合适;如果在Action中,可以根据项目规范和代码...

    struts2访问application、session以及request等web资源的示例代码

    此外,Struts2还提供了Action上下文(ActionContext)作为便捷访问这些域的途径,通过`ActionContext.getContext()`获取当前请求的上下文对象,再从中获取所需的域对象。 在"struts2-web"这个压缩包文件中,可能...

    获取 STRUTS2 FIELDERROR

    本文将深入探讨如何在Struts2中正确地获取 `FIELDERROR` 内容,并对其进行自定义展示。 ### Struts2框架概述 Struts2是一个基于MVC模式的Java Web应用框架,它提供了丰富的功能来简化Web应用的开发过程。其中,...

    Struts2的Action中获得request response session几种方法

    为了使Action能够访问到HTTP请求(HttpServletRequest)、响应(HttpServletResponse)、会话(HttpSession)等关键对象,Struts2提供了多种获取这些对象的方法。以下将详细介绍如何在Struts2的Action中获取request...

    struts1和struts2的区别

    而在Struts2中,Action类可以实现Action接口,也可以实现其他接口以获取自定义服务。更重要的是,Struts2允许任何带有execute方法的普通Java对象(POJO)作为Action,提供了更大的灵活性。 线程模型是另一个关键...

    struts2绕过waf读写文件及另类方式执行命令1

    "Runtime"用于执行命令,"dispatcher"涉及Struts2请求处理,而"getRealPath"用于获取服务器上的实际路径。 为了绕过这些关键字,攻击者可以使用OGNL(Object-Graph Navigation Language),这是Struts2中用于表达和...

    Struts2属性文件详解

    ### Struts2属性文件详解 #### struts.configuration 该属性用于指定加载Struts 2配置文件的配置文件管理器,默认值为`org.apache.struts2.config.DefaultConfiguration`,这是Struts 2默认的配置文件管理器。若...

    struts2 向结果传参数

    你可以在Action中将参数放入ActionContext,然后在结果页面中通过HttpServletRequest对象获取: ```java public String execute() { ActionContext context = ActionContext.getContext(); context.put("myParam...

    struts2使用request、response

    #### 二、Struts2中request与response的获取方式 在Struts2中,可以通过以下几种方式来获取request和response对象: 1. **使用Struts2提供的拦截器:** - Struts2提供了一组内置的拦截器,包括`...

    struts2配置过滤器

    ### Struts2配置过滤器详解 #### 一、概述 Struts2是基于MVC模式的一个开源框架,它能够帮助开发者构建出结构清晰且易于维护的Web应用。在实际开发过程中,为了实现某些功能(例如用户认证、权限控制等),往往...

    struts2的API耦合与动态方法调用

    2. **ServletActionContext类**:这是ActionContext的一个扩展,提供了更方便的访问Servlet相关对象的方法,如`ServletActionContext.getRequest()`和`ServletActionContext.getResponse()`分别用于获取...

    Struts2访问ServletAPI

    Struts2提供了一个名为`ServletActionContext`的类,它包装了`HttpServletRequest`和`HttpServletResponse`对象。在Action中,你可以通过`ServletActionContext`获取这些对象,如: ```java HttpServletRequest ...

    Struts1与Struts2本质区别

    - **Struts 2**:使用更强大的OGNL(Object Graph Notation Language)表达式语言,支持复杂的数据结构操作,如遍历集合、获取嵌套属性等,大大提高了数据访问的灵活性和便利性。 #### 7. 绑定值到视图的对比 - **...

    Struts2框架笔记

    ### Struts2框架知识点 #### Struts2框架概述 Struts2是一个开源的Web应用程序框架,基于MVC(Model-View-Controller)架构模式。它为Java Web开发者提供了一个强大的平台来构建高度可扩展的应用程序。Struts2的...

    ActionContext介绍(在Struts2中)

    例如,要获取HttpServletRequest和HttpSession,可以这样做: ```java HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = ServletActionContext.getRequest().getSession();...

    struts1&struts2

    - **Struts2** 解耦了Action与Servlet容器,提供了更简单的测试支持,Action可以通过模拟对象独立测试,而不需要实际的HttpServletRequest和HttpServletResponse。 6. **测试能力** - **Struts1.x** 的测试通常...

    Struts2的常量详解

    Struts2是一个流行的Java web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。它提供了许多内置功能,如国际化、异常处理、插件扩展等,以简化开发流程。在Struts2中,配置是至关重要的,因为它们定义了...

Global site tag (gtag.js) - Google Analytics