`
blueram
  • 浏览: 762406 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Struts2引用Servlet API中的对象,request、response或session

阅读更多

在Struts1.x中通过 public ActionForward execute(ActionMapping mapping, ActionForm form,
     HttpServletRequest request, HttpServletResponse response) { } ,得到request、response或session的值,而有时得到这些值是非常必要的!!而在Struts2 中“
如 果我要取得Servlet API中的一些对象,如request、response或session等,应该怎么做?这里的execute不像Struts 1.x的那样在参数中引入。”开发Web应用程序当然免不了跟这些对象打交道。在Strutx 2.0你可以有两种方式获得这些对象:非IoC(控制反转Inversion of Control)方式和IoC方式。

  1. 非IoC方式

    要获得上述对象,关键Struts 2.0中com.opensymphony.xwork2.ActionContext类。我们可以通过它的静态方法getContext()获取当前Action的上下文对象。 另外,org.apache.struts2.ServletActionContext作为辅助类(Helper Class),可以帮助您快捷地获得这几个对象。

    • HttpServletRequest request = ServletActionContext.getRequest();
    • HttpServletResponse response = ServletActionContext.getResponse();
    • HttpSession session = request.getSession();

    如果你只是想访问session的属性(Attribute),你也可以通过ActionContext.getContext().getSession()获取或添加session范围(Scoped)的对象。

  2. IoC方式

    要使用IoC方式,我们首先要告诉IoC容器(Container)想取得某个对象的意愿,通过实现相应的接口做到这点。具体实现,请参考例6 IocServlet.java。

classes/tutorial/NonIoCServlet.java

 

package tutorial;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

publicclass NonIoCServlet extends ActionSupport {
    private String message;
    
    public String getMessage() {
        return message;        
    }
    
    @Override
    public String execute() {    
        ActionContext.getContext().getSession().put("msg", "Hello World from Session!");
        
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();        
        HttpSession session = request.getSession();
        
        StringBuffer sb =new StringBuffer("Message from request: ");
        sb.append(request.getParameter("msg"));
        sb.append("<br>Response Buffer Size: ");
        sb.append(response.getBufferSize());
        sb.append("<br>Session ID: ");
        sb.append(session.getId());
        
        message = sb.toString();
        return SUCCESS;
    }
}

 

classes/tutorial/IoCServlet.java

 

 

 

package tutorial;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

publicclass IoCServlet extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {
    private String message;
    private Map att;
    private HttpServletRequest request;
    private HttpServletResponse response;    
    
    public String getMessage() {
        return message;        
    }
    
    publicvoid setSession(Map att) {
        this.att = att;
    }
    
    publicvoid setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
    
    publicvoid setServletResponse(HttpServletResponse response) {
        this.response = response;
    }
    
    @Override
    public String execute() {        
        att.put("msg", "Hello World from Session!");
        
        HttpSession session = request.getSession();
        
        StringBuffer sb =new StringBuffer("Message from request: ");
        sb.append(request.getParameter("msg"));
        sb.append("<br>Response Buffer Size: ");
        sb.append(response.getBufferSize());
        sb.append("<br>Session ID: ");
        sb.append(session.getId());
        
        message = sb.toString();
        return SUCCESS;
    }
}

 

 

 Servlet.jsp

 

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
    <title>Hello World!</title>
</head>
<body>
    <h2>
        <s:property value="message" escape="false"/>
        <br>Message from session: <s:property value="#session.msg"/>
    </h2>
</body>
</html>

 

classes/struts.xml中NonIocServlet和IoCServlet Action的配置

 

<action name="NonIoCServlet" class="tutorial.NonIoCServlet">
    <result>/Servlet.jsp</result>
</action>
<action name="IoCServlet" class="tutorial.IoCServlet">
    <result>/Servlet.jsp</result>
</action>

 

 

运行Tomcat,在浏览器地址栏中键入http://localhost:8080/Struts2_Action/NonIoCServlet.action?msg=Hello%20World!http://localhost:8080/Struts2_Action/IoCServlet.action?msg=Hello%20World!
 

分享到:
评论

相关推荐

    Struts2访问ServletAPI

    在Struts2框架中,我们有时需要直接与Servlet API交互,例如处理HTTP请求、响应,或者使用Session、Cookie等。本文将深入探讨如何在Struts2中访问Servlet API。 首先,理解Struts2的执行流程至关重要。当一个请求...

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

    默认情况下,Struts2已经配置了一些拦截器,例如`servletConfig`拦截器,它可以提供对servlet API的访问,包括request、response、session等。 在Action中,可以直接调用`ServletActionContext.getRequest()`、`...

    struts2使用request、response

    在Struts2中,虽然request、response和session被隐藏起来,但是提供了多种便捷的方式来获取这些对象,使得开发者可以在自定义的方法中灵活地使用它们。通过使用Struts2提供的接口、注解或ActionContext,开发者能够...

    Struts2 part 3:在Action中使用ServletAPI

    4. **文件上传和下载**:Struts2支持文件上传,而底层实现就是Servlet API中的`Part`接口和`ServletFileUpload`类。你可以通过Action直接处理文件上传请求,进行文件验证、存储等操作。 5. **Filter和Dispatcher**...

    struts2访问request,session,application作用域

    在 Struts2 中,处理用户请求时经常需要使用到 Servlet 的内置对象,比如 Request、Session 和 Application,这些对象可以帮助开发者存储和获取数据。然而,在实际应用中,为了避免代码与 Servlet API 过度耦合,...

    Struts2通过使用ActionContext类获取request和response对象

    首先,ActionContext类包含了一个Map,该Map映射了Servlet API中的请求和响应对象。你可以通过以下方式获取它们: ```java ActionContext context = ActionContext.getContext(); HttpServletRequest request = ...

    struts2获取response的方法

    Struts2支持使用OGNL(Object-Graph Navigation Language)表达式在JSP或Freemarker模板中直接访问Response对象,虽然这并不常见,但在某些场景下可能有用。 ```jsp 示例 --%&gt; &lt;%@ taglib prefix="s" uri="/struts...

    Struts 2 Core 2.1.2 API

    9. **ActionContext**: 它提供了当前请求上下文的信息,包括ValueStack、Session、Request和Response等。开发者可以通过ActionContext获取和设置这些信息。 10. **ActionInvocation**: 表示Action的执行过程,封装...

    详解Struts2中Action访问Servlet API的几种方法

    本文将详细解析三种在Struts2 Action中访问Servlet API的方法。 **方法一:IOC方式(推荐)** Struts2引入了依赖注入(Inversion of Control, IOC)的概念,通过ActionContext类来间接访问Servlet API。...

    Struts2访问Servlet的三种方式

    然而,在实现业务逻辑时,经常需要访问 Servlet 中的对象,如 request、session 和 application 等。因此,Struts2 提供了三种方式来访问 Servlet API,这三种方式分别是实现特定接口、通过 ServletActionContext 类...

    菜鸟学struts1必备 API

    5. ActionContext:在Action执行过程中,提供了访问上下文信息的接口,如Request、Response、Session等。 6..struts1.2_en.chm:这是一个帮助文档,包含了Struts1的详细API和开发者指南。对于初学者来说,是学习和...

    struts2学习心得

    1. 在软件设计方面Struts2没有像Struts1那样和servlet API和Struts API那样紧密的耦合。Struts2可以不依赖它们。Struts2属于无侵入式设计。而Struts1属于侵入式设计。 例如:public class HelloWordAction extends ...

    java web 实战宝典_JSP+Servlet+Struts_2+Hibernate+Spring+Ajax

    JSP的主要特点包括能够与JavaBean技术结合,实现业务逻辑与表示层的分离,它还提供了丰富的内置对象,比如request、response、session等,这些都是JSP页面可以直接使用的对象。 Servlet是Java Servlet的简称,是一...

    struts2配置过滤器

    - 检查Session中是否存在指定的键名(`sessionKey`),如果存在则允许请求继续传递给下一个过滤器或目标资源;否则,根据`redirectURL`配置的值进行重定向操作。 #### 三、总结与思考 通过以上分析可以看出,在...

    struts2-core-2.0.11源码

    3. **Action上下文(Action Context)**:`org.apache.struts2.dispatcher`包下的`ActionContext`类存储了请求处理过程中的上下文信息,如值栈(Value Stack)、session、request、response等。 4. **值栈(Value ...

    struts2中action如何获取jsp页面参数1.pdf

    - `ServletActionContext`是Struts2中扩展了`ActionContext`的一个类,它增加了直接访问Servlet API的能力。 - 如果需要直接操作`HttpServletRequest`、`HttpServletResponse`或其他Servlet相关的对象,可以使用`...

    Struts2访问servlet分享

    在Struts2框架中,有时我们需要直接访问Servlet相关对象,如HttpServletRequest、HttpSession和ServletContext,以实现特定的功能。本文将探讨如何在Struts2中访问和操作这些对象。 **一、访问或添加request/...

    Java Web开发技术大全--JSP+Servlet+Struts 2+Hibernate+Spring+AJAX.(李宁)

    JSP通过内置对象如Request、Response、Session、Application等提供与用户的交互,同时支持自定义标签库,使得开发更加灵活和模块化。 **Servlet** 是Java EE的一部分,它是一个服务器端的Java类,用于处理客户端...

    Struts2的总结和Strut2集成Spring

    在Struts2中,可以通过注入的方式直接在Action中使用`HttpServletRequest`, `HttpServletResponse`和`HttpSession`对象,无需手动从Servlet API中获取。这简化了数据的读取和响应的控制。 #### Action的返回值 ...

    struts1.x 和 struts2.x向Action里填充jsp参数原理

    2. Struts2的ActionContext保存了当前请求的上下文信息,包括参数、session、request和response等。 3. 拦截器链开始执行,其中的ParameterInterceptor负责将请求参数绑定到Action实例的属性上,使用OGNL(Object-...

Global site tag (gtag.js) - Google Analytics