1。访问或添加request/session/application属性
将前一篇文件中的TestAction中的代码修改为如下所示:
public class TestAction {
public String execute() {
ActionContext ctx = ActionContext.getContext();
ctx.getApplication().put("app", "应用范围");// 往ServletContext里放入app
ctx.getSession().put("ses", "session范围");// 往session里放入ses
ctx.put("req", "request范围");// 往request里放入req
return "success";
}
}
result.jsp中的代码修改为:
<body>
${applicationScope.app} <br>
${sessionScope.ses}<br>
${requestScope.req}<br>
</body>
然后访问testAction,reault.jsp页面显示的内容为:
应用范围
session范围
request范围。
在上面的程序中也可以向request/session/application添加集合对象,然后使用jstl标签<c:forEach>在jsp页面迭代,就像使用servlet和jsp编程一样的方式。
2。获取HttpServletRequest / HttpSession / ServletContext / HttpServletResponse对象
方式一、与Servlet解耦合的非IOC方式
获取的scope对象与容器无关,通过ActionContext获取。
public class TestAction {
ActionContext context;
Map<String,Object> request;
Map<String,Object> session;
Map<String,Object> application;
@SuppressWarnings("unchecked")
public String execute() throws Exception {
context=ActionContext.getContext();
//request= (Map)context.get("request");
session=context.getSession();
application=context.getApplication();
context.put("req", "request范围");// 往request里放入req
//request.put("req", "requst属性");//或者使用这种方式
session.put("ses", "sesion属性");
application.put("app", "application属性");
return "success";
}
}
result.jsp中的代码修改为:
${requestScope.req}
${sessionScope.ses}
${applicationScope.app}
<h4>以下使用scope.getAttribute的形式来接受</h4>
request: <%=request.getAttribute("req") %><br>
session: <%=session.getAttribute("ses") %><br>
application:<%=application.getAttribute("app") %><br>
页面访问显示结果为:
requst属性 sesion属性 application属性
以下使用scope.getAttribute的形式来接受
request: requst属性
session: sesion属性
application:application属性
ActionContext中的部分源码如下所示:
public class ActionContext implements Serializable{
Map<String, Object> context;
public ActionContext(Map<String, Object> context) {
this.context = context;
}
public void setApplication(Map<String, Object> application) {
put("com.opensymphony.xwork2.ActionContext.application", application);
}
public Map<String, Object> getApplication() {
return ((Map) get("com.opensymphony.xwork2.ActionContext.application"));
}
public void setSession(Map<String, Object> session) {
put("com.opensymphony.xwork2.ActionContext.session", session);
}
public Map<String, Object> getSession() {
return ((Map) get("com.opensymphony.xwork2.ActionContext.session"));
}
public Object get(String key) {
return this.context.get(key);
}
}
分析:通过ActionContext的getContext静态方法得到ActionContext对象,然后ActionContext对象调用get方法来获取一个存储在Map中的对象。
方式二、与Servlet解耦合的IOC方式
实现指定接口,由struts2框架运行时注入:(在struts2框架运行时会自动注入值)
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
public class TestAction implements RequestAware,SessionAware,ApplicationAware {
Map<String, Object> request;
Map<String, Object> session;
Map<String, Object> application;
public String execute() throws Exception {
request.put("req", "requst属性");
session.put("ses", "sesion属性");
application.put("app", "application属性");
return "success";
}
public void setRequest(Map<String, Object> request) {
System.out.println("request:" + request.getClass().getName());
this.request=request;
}
public void setSession(Map<String, Object> session) {
System.out.println("session:" + session.getClass().getName());
this.session=session;
}
public void setApplication(Map<String, Object> application) {
System.out.println("application:" + application.getClass().getName());
this.application=application;
}
}
当访问testAction时,控制台打印出的信息如下所示:
application:org.apache.struts2.dispatcher.ApplicationMap
session:org.apache.struts2.dispatcher.SessionMap
request:org.apache.struts2.dispatcher.RequestMa
RequestAware接口的源码如下所示:其他接口的源码类似。
public interface RequestAware
{
public abstract void setRequest(Map<String, Object> paramMap);
}
方式三、与Servlet耦合的非IOC方式
通过ServletActionContext.类直接获取:
public class TestAction {
HttpServletRequest request;
HttpSession session;
ServletContext application;
public String execute() throws Exception {
request = ServletActionContext.getRequest();
session = request.getSession();
application = ServletActionContext.getServletContext();
request.setAttribute("req", "requst属性");
session.setAttribute("ses", "sesion属性");
application.setAttribute("app", "application属性");
return "success";
}
}
方式四、与Servlet耦合的IOC方式
实现指定接口,由struts2框架运行时注入:(在struts2框架运行时会自动注入值)
public class TestAction implements ServletRequestAware,ServletResponseAware,ServletContextAware{
private ActionContext context;
private HttpServletRequest request;
private HttpServletResponse response;
HttpSession session;
ServletContext application;
public String execute() throws Exception {
context=ActionContext.getContext();
session=request.getSession();
request.setAttribute("req", "requst属性");
session.setAttribute("ses", "sesion属性");
application.setAttribute("app", "application属性");
return "success";
}
public void setServletRequest(HttpServletRequest request) {
System.out.println("HttpServletRequest测试:"+request);
this.request=request;
}
public void setServletContext(ServletContext application) {
System.out.println("ServletContext测试:"+application);
this.application=application;
}
public void setServletResponse(HttpServletResponse response) {
System.out.println("HttpServletResponse测试:"+ response);
this.response=response;
}
}
在访问此action时,控制台打印的信息如下所示:
HttpServletRequest测试:org.apache.struts2.dispatcher.StrutsRequestWrapper@1acfa31
HttpServletResponse测试:org.apache.catalina.connector.ResponseFacade@15dd910
ServletContext测试:org.apache.catalina.core.ApplicationContextFacade@47a0d4
ServletRequestAware的接口源码如下所示:
public interface ServletRequestAware
{
public abstract void setServletRequest(HttpServletRequest paramHttpServletRequest);
}
分享到:
相关推荐
在Struts2中,访问request、session和application对象是进行数据共享和传递的重要手段。这篇学习笔记主要探讨了如何在Struts2框架下有效地利用这三种域对象。 首先,request对象代表一次HTTP请求,它存储的数据仅...
以下将详细介绍如何在Struts2的Action中获取request、response、session。 ### 1. 使用ActionContext获取request、response、session Struts2的Action可以通过`ActionContext`来间接获取`request`、`response`和`...
在 Struts2 中,处理用户请求时经常需要使用到 Servlet 的内置对象,比如 Request、Session 和 Application,这些对象可以帮助开发者存储和获取数据。然而,在实际应用中,为了避免代码与 Servlet API 过度耦合,...
在Struts2中,有四种主要的方式可以用来操作request、session和application上下文中的数据。这篇内容将深入探讨这四种方法,并结合源码和实用工具来帮助理解。 1. **ActionContext**: Struts2的核心组件...
在Struts2中,访问Web资源,如application、session和request,是常见的操作,这有助于实现数据共享和传递。本示例代码将帮助开发者更好地理解和运用这些功能。 一、Application域对象 Application域对象在所有用户...
在Struts2框架中,理解并正确使用request、response、session和application范围对于有效地管理数据和状态至关重要。这些范围帮助我们在Web应用程序中实现逻辑和数据流的分离,提高代码的可维护性和可扩展性。通过...
在Struts2中,ActionContext不仅仅是获取request和response的工具,它还包含了其他有用的上下文信息,如session、application等。例如,你可以通过ActionContext获取session中的数据: ```java Map, Object> ...
2.修改题目1,将提交的“用户名信息”保存到request中,“密码信息”保存到session中,而“用户是否已经注册的判定信息”保存在application中,并在显示页面中,分别从request、session和application中获取数据并...
### Struts2中#号的用法详解 在Struts2框架中,`#`符号是一种非常重要的语法元素,主要用于访问上下文中的变量。本文将详细介绍`#`符号的使用方法及其应用场景,帮助读者更好地理解和掌握Struts2框架的相关知识。 ...
在Struts2中,`session`对象通常被封装成`SessionMap`的形式。获取`SessionMap`对象的方法有: ```java // 方法A Map session = ActionContext.getSession(); // 方法B Map session = (Map) ActionContext....
通过`pageContext`,我们可以方便地获取到如`request`、`session`、`application`等内置对象,这对于实现自定义标签非常有帮助。 #### 2.2 获取`HttpSession`的具体方法 在自定义标签的Java类中,可以通过以下方式...
- EL表达式默认会先查找page范围内的变量,然后依次是request、session和application范围。 **示例代码:** ```jsp <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ... <h1>Welcome, ${user....
ActionContext是Struts2框架中一个关键的组件,它提供了当前请求上下文的信息,而OGNL(Object-Graph Navigation Language)则是Struts2中的表达式语言,用于在模型和视图之间进行数据传递。下面将详细探讨这两个...
### Struts2中OGNL的使用详解 #### 一、OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置一个对象图中的属性。它在Struts2框架中扮演着极其重要的角色,是Struts2实现...
Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。如果途中找到username,就直接回传,不再继续找下去,但是如果全部的范围都没有找到时,就回传null。 属性...
象,如HttpServletRequest、HttpServletResponse,或者需要访问Session和Application等信息,在Struts2框架中,我们可以利用ActionContext和ServletActionContext这两个类。ActionContext是Struts2提供的一个核心上...
- **Action类**:在Struts2中,Action类是处理用户请求的中心组件,它封装了业务逻辑,并通过调用Service层来处理实际的业务操作。 - **配置文件**:`struts.xml`是Struts2的主要配置文件,用于定义Action、结果...
4. 命名对象:包括在Servlet作用范围内的对象信息,如Request、Session、Application等。 在实际开发中,开发者可以通过OGNL表达式访问值栈中的Action属性、对象和其他信息。例如,使用标签可以输出Action中的属性...