在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方式。
-
非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)的对象。
-
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框架中,我们有时需要直接与Servlet API交互,例如处理HTTP请求、响应,或者使用Session、Cookie等。本文将深入探讨如何在Struts2中访问Servlet API。 首先,理解Struts2的执行流程至关重要。当一个请求...
默认情况下,Struts2已经配置了一些拦截器,例如`servletConfig`拦截器,它可以提供对servlet API的访问,包括request、response、session等。 在Action中,可以直接调用`ServletActionContext.getRequest()`、`...
在Struts2中,虽然request、response和session被隐藏起来,但是提供了多种便捷的方式来获取这些对象,使得开发者可以在自定义的方法中灵活地使用它们。通过使用Struts2提供的接口、注解或ActionContext,开发者能够...
4. **文件上传和下载**:Struts2支持文件上传,而底层实现就是Servlet API中的`Part`接口和`ServletFileUpload`类。你可以通过Action直接处理文件上传请求,进行文件验证、存储等操作。 5. **Filter和Dispatcher**...
在 Struts2 中,处理用户请求时经常需要使用到 Servlet 的内置对象,比如 Request、Session 和 Application,这些对象可以帮助开发者存储和获取数据。然而,在实际应用中,为了避免代码与 Servlet API 过度耦合,...
首先,ActionContext类包含了一个Map,该Map映射了Servlet API中的请求和响应对象。你可以通过以下方式获取它们: ```java ActionContext context = ActionContext.getContext(); HttpServletRequest request = ...
Struts2支持使用OGNL(Object-Graph Navigation Language)表达式在JSP或Freemarker模板中直接访问Response对象,虽然这并不常见,但在某些场景下可能有用。 ```jsp 示例 --%> <%@ taglib prefix="s" uri="/struts...
9. **ActionContext**: 它提供了当前请求上下文的信息,包括ValueStack、Session、Request和Response等。开发者可以通过ActionContext获取和设置这些信息。 10. **ActionInvocation**: 表示Action的执行过程,封装...
本文将详细解析三种在Struts2 Action中访问Servlet API的方法。 **方法一:IOC方式(推荐)** Struts2引入了依赖注入(Inversion of Control, IOC)的概念,通过ActionContext类来间接访问Servlet API。...
然而,在实现业务逻辑时,经常需要访问 Servlet 中的对象,如 request、session 和 application 等。因此,Struts2 提供了三种方式来访问 Servlet API,这三种方式分别是实现特定接口、通过 ServletActionContext 类...
5. ActionContext:在Action执行过程中,提供了访问上下文信息的接口,如Request、Response、Session等。 6..struts1.2_en.chm:这是一个帮助文档,包含了Struts1的详细API和开发者指南。对于初学者来说,是学习和...
1. 在软件设计方面Struts2没有像Struts1那样和servlet API和Struts API那样紧密的耦合。Struts2可以不依赖它们。Struts2属于无侵入式设计。而Struts1属于侵入式设计。 例如:public class HelloWordAction extends ...
JSP的主要特点包括能够与JavaBean技术结合,实现业务逻辑与表示层的分离,它还提供了丰富的内置对象,比如request、response、session等,这些都是JSP页面可以直接使用的对象。 Servlet是Java Servlet的简称,是一...
- 检查Session中是否存在指定的键名(`sessionKey`),如果存在则允许请求继续传递给下一个过滤器或目标资源;否则,根据`redirectURL`配置的值进行重定向操作。 #### 三、总结与思考 通过以上分析可以看出,在...
3. **Action上下文(Action Context)**:`org.apache.struts2.dispatcher`包下的`ActionContext`类存储了请求处理过程中的上下文信息,如值栈(Value Stack)、session、request、response等。 4. **值栈(Value ...
- `ServletActionContext`是Struts2中扩展了`ActionContext`的一个类,它增加了直接访问Servlet API的能力。 - 如果需要直接操作`HttpServletRequest`、`HttpServletResponse`或其他Servlet相关的对象,可以使用`...
在Struts2框架中,有时我们需要直接访问Servlet相关对象,如HttpServletRequest、HttpSession和ServletContext,以实现特定的功能。本文将探讨如何在Struts2中访问和操作这些对象。 **一、访问或添加request/...
JSP通过内置对象如Request、Response、Session、Application等提供与用户的交互,同时支持自定义标签库,使得开发更加灵活和模块化。 **Servlet** 是Java EE的一部分,它是一个服务器端的Java类,用于处理客户端...
在Struts2中,可以通过注入的方式直接在Action中使用`HttpServletRequest`, `HttpServletResponse`和`HttpSession`对象,无需手动从Servlet API中获取。这简化了数据的读取和响应的控制。 #### Action的返回值 ...
2. Struts2的ActionContext保存了当前请求的上下文信息,包括参数、session、request和response等。 3. 拦截器链开始执行,其中的ParameterInterceptor负责将请求参数绑定到Action实例的属性上,使用OGNL(Object-...