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

Struts2获取httpServlet 对象

阅读更多
在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中,表单数据不是通过ActionForm对象传递给Action的,而是直接绑定到Action类的属性上。这种方式简化了数据传递的过程,并且提供了更好的灵活性。 #### 6. 类型转换技术及其配置...

    MAX的struts2教程、struts2 API、servlet API

    4. **请求与响应对象**:了解HttpServletRequest和HttpServletResponse对象,以及它们提供的各种方法,如获取请求参数、设置响应头等。 5. **会话管理**:掌握如何使用HttpSession对象进行会话跟踪。 6. **过滤器**...

    servlet和struts2笔记

    ### servlet和struts2笔记 #### 一、Servlet 基础 **Servlet** 是 Java Web 开发中的一种核心技术,它被设计用于处理客户端发送到服务器的 HTTP 请求,并且能够生成响应。Servlet 可以看作是服务器端的小程序,...

    Servlet和Struts2的交互(转载)

    3. **模型绑定**:Struts2支持数据绑定,可以通过ActionContext将请求参数自动绑定到Action的属性上,简化了数据获取的过程。 4. **结果转发**:Action执行后,根据返回的结果代码,Struts2会决定如何响应客户端。...

    servlet AND Struts2笔记

    ### servlet与Struts2知识点梳理 #### 一、Servlet基础概念及实现方式 - **Servlet定义**:Servlet是一种运行在服务器端的小程序,用于处理客户端发送的HTTP请求,并生成相应的HTTP响应。它属于动态资源,可以被多...

    Struts1源码解析

    2. `getModuleConfig()`获取封装了请求的`ModuleConfig`对象。 3. 根据`ModuleConfig`获取Action处理类的实例,并调用其`process()`方法。 在`process()`方法内部: 1. `processPath()`解析请求的URI路径,用于...

    Struts1.2源码解读

    2. initModuleConfig():随后,通过配置工厂实例化一个ModuleConfig对象。这个工厂方法实际执行了创建ModuleConfig对象的操作,创建的ModuleConfig对象类型取决于工厂的配置。 3. createModuleConfig()方法:负责...

    Struts简单机制.txt

    解析完成后,会获取到相应的ActionMapping对象,ActionMapping对象包含了与Action相关的所有信息。 - **processActionForm()方法**:该方法用于验证ActionForm表单数据的有效性。如果ActionForm已经被配置,则会...

    精通Struts:基于MVC的Java Web设计与开发(下).pdf

    在Struts框架中,View层通过Action对象获取数据,并将其呈现给用户。 #### 三、Struts框架的工作流程 1. **用户发起请求**:用户通过浏览器向服务器发送HTTP请求。 2. **ActionServlet接收请求**:服务器接收到...

    Struts教程

    `ActionServlet`是Struts框架的核心组件之一,继承自`HttpServlet`,负责接收客户端请求,解析请求并调用相应的Action来处理请求。在处理过程中,`ActionServlet`会执行以下任务: - 查找并解析URL。 - 映射URL至...

    Struts1_Java Web应用简介.ppt

    Struts1是一个经典的Java Web开发框架,主要用于构建MVC(Model-...虽然现在Struts1已经被更新的Struts2和其他现代框架如Spring MVC取代,但其基本原理和设计模式对于理解Web应用的架构设计仍然具有重要的参考价值。

    struts核心类用法

    `ActionServlet`是Struts框架的核心控制器,它继承自`javax.servlet.http.HttpServlet`,负责处理客户端发送的HTTP请求,并将请求分发到相应的`Action`类进行处理。`ActionServlet`的主要职责包括: - **初始化**:...

    Struts+Hibernate面试题

    3. **ActionServlet**:ActionServlet是Struts的控制器,继承自HttpServlet,负责处理所有的HTTP请求。在web.xml中配置ActionServlet,它会解析请求,调度Action,管理和维护应用程序的状态。 **Spring框架** ...

    struts-原理.

    Struts框架的核心是`ActionServlet`,它继承自`HttpServlet`,并充当控制器的角色。`ActionServlet`负责接收客户端请求,解析请求参数,并决定调用哪个业务逻辑处理类(Action)。这一过程中,Struts框架通过配置...

    struts笔记

    2. 根据`ActionMapping`创建或找到相应的`ActionForm`实例,`ActionForm`用于存储从客户端请求中获取的数据。 3. 如果在`ActionMapping`中定义了`Action`类,那么`ActionServlet`会实例化该`Action`类,并调用其`...

    Struts framework的工作原理和组件Struts framework的工作原理和组件

    ActionForm实现了`org.apache.struts.action.ActionForm`接口,提供了一系列的getter和setter方法来获取和设置表单字段的值。 - **示例**: ```xml ``` 上述配置指定了名为`LoginForm`的ActionForm类型为`...

    Struts中文手册.pdf

    `ActionServlet`是Struts框架的核心控制器,继承自`HttpServlet`类。它处理所有的HTTP请求,并负责调度到相应的Action实例进行处理。 ###### 1.4.1 ActionServlet配置 在`web.xml`文件中,需要配置`ActionServlet`...

    struts面试题

    2. **配置文件定义**:另一种方式是在Struts的配置文件中定义`&lt;forward&gt;`元素,预先设置好可能的流程分支。这种方式更为灵活,可以在不修改代码的情况下调整流程逻辑。在Action的`execute()`方法中,通过调用`...

Global site tag (gtag.js) - Google Analytics