`
i_feng
  • 浏览: 88809 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用struts的Action类中获得HttpServletResponse,ServletRequest对象

阅读更多
常用的主要有4中方法:平时使用过使用过三种,偶然间看到有博客总结了。
1、使用Struts2 Aware拦截器
需要Action类实现相应的拦截器接口。如我们要获得HttpServletResponse对象,需要实现org.apache.struts2.interceptor.ServletResponseAware接口
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及其他的一些信息
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 接口"); 
    } 

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中获得Response对象的四种方法

    通过这个接口,Struts2框架会在执行execute方法前自动将HttpServletResponse对象注入到Action类的成员变量中。例如: ```java public class MyAction extends ActionSupport implements ServletResponseAware { ...

    struts解决中文乱码问题

    在开发Web应用程序时,中文乱码问题是一个常见的挑战,特别是在使用Struts框架的时候。这个问题的出现通常是由于客户端和服务器端的字符集不一致导致的。本文将深入探讨如何解决Struts框架下的中文乱码问题。 首先...

    struts1.2 解决中文乱码

    在 Web 应用开发过程中,特别是在使用 Java 的 Struts 1.2 框架时,中文乱码问题是开发者经常遇到的一个难题。这不仅影响用户体验,还会对数据的准确性和完整性造成威胁。 **问题表现:** - 在页面显示中文时出现...

    J2EE中Struts中四种解决中文乱码问题的方法

    在Java Web开发过程中,尤其是使用Struts框架时,经常会遇到中文乱码的问题。本文将详细介绍在J2EE环境下,利用Struts框架解决中文乱码问题的四种实用方法。 #### 方法一:通过添加过滤器解决乱码 **原理介绍**:...

    struts2配置过滤器

    本文将通过一个具体的示例来详细介绍如何在Struts2项目中配置过滤器。 #### 二、过滤器配置实例分析 ##### 2.1 web.xml配置解析 在给定的web.xml配置文件中,可以看到对`SessionInvalidate`过滤器进行了定义和...

    java+struts2防盗链(filter不可过滤action).docx

    Struts2 的拦截器是一个特殊的类,可以在 Action 执行前和执行后执行一些操作。 下面是使用 Struts2 实现防盗链的代码: ```java package com.l99.interceptor; import com.opensymphony.xwork2.ActionInvocation;...

    Struts中中文乱码的解决方法

    2. **自定义RequestProcessor**:创建一个继承自`org.apache.struts.action.RequestProcessor`的类,如`MyProcessor`。在该类的`processPreprocess`方法中,设置请求和响应的字符编码为`UTF-8`: ```java public ...

    struts2控制器源码讲解

    `ActionMapping`是Struts2中的一个重要概念,它定义了请求URL与特定Action类之间的映射关系。`actionMapper`通常使用`DefaultActionMapper`,它根据配置文件解析请求路径,生成Action映射。 3. **异常处理**:在...

    Struts框架 架构 应用 演示 ppt

    Struts框架的配置文件(如struts-config.xml)定义了Action和ActionForm,以及Action的映射路径和转发规则。 5. Struts控制器组件(Controller) Struts的控制器是ActionServlet,它拦截HTTP请求,解析请求参数,...

    Struts2学习文档

    - **概念介绍**:在Struts2框架中,Action对象可以通过`ActionContext`来间接访问到Servlet API,这是因为Struts2内部实现了Servlet容器的相关功能。这种设计模式能够更好地实现业务逻辑层与Web容器之间的解耦。 - ...

    Struts权限过滤器

    Struts权限过滤器是Java Web开发中用于控制用户访问权限的关键组件,主要应用于基于Struts 2框架的应用程序。在Struts 2框架中,过滤器扮演着重要的角色,它们在HTTP请求到达Action之前进行拦截,对请求进行预处理,...

    struts2用cookie实现自动登录中用过滤器执行读取上下文方法

    在Struts2中,可以通过实现`Filter`接口或者继承`FilterDispatcher`类来自定义过滤器。在这个过滤器的`doFilter`方法中,我们可以检查请求是否带有自动登录相关的Cookie。如果找到该Cookie,就从Cookie中解析出用户...

    struts2乱码与json插件(1)

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且模块化的MVC(Model-...通过正确配置过滤器、`struts.xml` 和使用JSON插件,可以有效地管理和解决Web应用中的编码问题,同时提高数据交互的效率和灵活性。

    【Struts】设置字符编码过滤器,解决乱码问题收藏

    3. 最后,确保所有处理请求的组件(如Action类)和视图(如JSP页面)也使用相同的字符编码。在JSP页面中,可以通过`;charset=UTF-8" %&gt;`指令设置编码。 除了上述方法,还可以使用Spring MVC的`...

    j2ee项目中中文乱码问题集锦

    在Struts2框架中,可以通过重写`ActionServlet`类的`service`方法来处理乱码问题。示例如下: ```java public class ActionServlet extends org.apache.struts.action.ActionServlet { private static final long ...

    处理Java的ssh集成中的中文乱码问题

    为了更全面地解决问题,我们还可以创建一个继承了`org.apache.struts.action.RequestProcessor`的类`MyPro`。在`processPreprocess()`方法中设置请求和响应的字符编码。 ```java import java.io....

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

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...

    BeanUtils的应用

    public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest servletRequest, HttpServletResponse servletResponse) { PersonForm pfm = (PersonForm) actionForm; ...

    java中文乱码的解决方法

    对于使用Struts1框架的应用程序,可以通过扩展Apache的`ActionServlet`来解决中文乱码问题。 1. **自定义ActionServlet**: 创建一个自定义的Servlet类,继承自`ActionServlet`,并在其`service`方法中增加设置...

    java中文乱码的解决方法.pdf

    - 使用Spring的`CharacterEncodingFilter`:在`web.xml`配置文件中,你可以定义一个名为`encoding`的过滤器,指定过滤器类为`org.springframework.web.filter.CharacterEncodingFilter`。然后通过`&lt;init-param&gt;`...

Global site tag (gtag.js) - Google Analytics