- 浏览: 33019 次
- 性别:
- 来自: 西安
文章分类
最新评论
struts2后台的Action跟我们前台的页面来通讯的时候,由于它不能直接拿到request,session,servletContext,比如当我们有人登陆了,我们要在session中设一个值,表示它登陆了,如何把相关的数据设到session里面?同样如何设置request、servletContext等?response不用访问它,因为我们的结果是通过result返回的.
访问Web元素可以有四种方法,下面依次列出
index.jsp
user_login_success.jsp
struts.xml
1、通过struts2 中的ActionContext类来访问(不常用)
Context直接翻译过来是:”上下文”。Context就是当前执行的环境,它会把周围环境帮你封转到Context这个对象里面,当你想访问这些东西的时候,通过Context去取。
原来学习过得ServletContext代表的就是servlet的运行环境,原来我们写程序就用ServletContext拿到各种各样的配置,ActionContext也就是Action周边运行的情况,Action运行的时候,首先接收到请求接收到request,response等等后面再接着调你的处理过程,Action处理的过程中,比如说那些配置怎么配的,执行环境怎么样等等都要通过ActionContext来拿。
ActionContext类中以下几个方法为其常用:
Static ActionContext getContext(): 获取ActionContext实例;
Object get(Object key): 类似于request.getAttribute(String name);
Map getParameters():获取所有的请求参数,类似于request.getParameterMap();
Map getApplication(): 相当于ServletContext实例,返回的是Map对象
Map getSession() :返回类似于HttpSession的实例
void setApplication(Map application): 直接传入一个Map实例,将Map实例里的key-value对转换成application的key-value
void setSession(Map session): 直接传入一个Map实例,将Map实例里的key-value对转换成session的key-value
我们的后台放了request,session,application这三个东西都是map,但是它反馈到前台之后居然用request,session,application可以拿到,所以struts2一定帮我们在Map和HttpRequest之间建立某种联系,对于我们自己设定的map类型的request这里面的属性在处理的过程中会全都复制到Http对象里边去。应该就是用void setApplication(Map application),void setSession(Map session)做的处理
在jsp中
第一种访问request里面的值:<%=request.getAttribute("r1") //原始的方式
第二种访问request里面的值:<s:property value="#request.r1"/>
2.IoC方式 IoC(控制反转)是Spring里面的特征之一(最常用)
一个请求过来Struts会new出一个Action出来;2.new完之后它会检查Action是否实现了RequestAware接口.3如果Action实现了RequestAware接口,就可以调用RequestAware接口的setRequest()方法.
而且其实request我们也很少去拿它,因为我们Action的成员变量默认会起到request的作用,它自己会放到valueStack里面, valueStack本身就是放到request里面,所以根本不用去拿request.
3、
4、
总结:
第一种方法依赖于Struts2容器,取得相关对象数据;
第二种方法,依赖注入DI(dependency injection),控制反转IoC(Inverse of control),对象数据被容器注入;
第三种方法,依赖于容器取得相关对象数据;
第四种方法,依赖注入一个对象的数据后,再通过这个对象获取到其它对象数据。
推荐使用第二种方法。 [color=red][/color]
访问Web元素可以有四种方法,下面依次列出
index.jsp
<?xml version="1.0" encoding="GB18030" ?> <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <% String context = request.getContextPath(); %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>Insert title here</title> </head> <body> <form name="f" action="" method="post"> 用户名:<input type="text" name="name"/> 密码:<input type="text" name="password"/> <br /> <input type="button" value="submit1" onclick="javascript:document.f.action='login/login1';document.f.submit();" /> <input type="button" value="submit2" onclick="javascript:document.f.action='login/login2';document.f.submit();" /> <input type="button" value="submit3" onclick="javascript:document.f.action='login/login3';document.f.submit();" /> <input type="button" value="submit4" onclick="javascript:document.f.action='login/login4';document.f.submit();" /> </form> </body> </html>
user_login_success.jsp
<?xml version="1.0" encoding="GB18030" ?> <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>Insert title here</title> </head> <body> User Login Success! <br /> <s:property value="#request.r1"/> | <%=request.getAttribute("r1") %> <br /> <s:property value="#session.s1"/> | <%=session.getAttribute("s1") %> <br /> <s:property value="#application.a1"/> | <%=application.getAttribute("a1") %> <br /> <s:property value="#attr.a1"/><br /> <s:property value="#attr.s1"/><br /> <s:property value="#attr.r1"/><br /> <s:debug></s:debug> <br /> </body> </html>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="login" extends="struts-default" namespace="/login"> <action name="login*" class="com.wwm.struts2.user.action.LoginAction{1}"> <result>/user_login_success.jsp</result> </action> </package> </struts>
1、通过struts2 中的ActionContext类来访问(不常用)
import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction1 extends ActionSupport { private Map request; private Map session; private Map application; public LoginAction1() { request = (Map)ActionContext.getContext().get("request"); session = ActionContext.getContext().getSession(); application = ActionContext.getContext().getApplication(); } public String execute() { request.put("r1", "r1"); session.put("s1", "s1"); application.put("a1", "a1"); return SUCCESS; } }
Context直接翻译过来是:”上下文”。Context就是当前执行的环境,它会把周围环境帮你封转到Context这个对象里面,当你想访问这些东西的时候,通过Context去取。
原来学习过得ServletContext代表的就是servlet的运行环境,原来我们写程序就用ServletContext拿到各种各样的配置,ActionContext也就是Action周边运行的情况,Action运行的时候,首先接收到请求接收到request,response等等后面再接着调你的处理过程,Action处理的过程中,比如说那些配置怎么配的,执行环境怎么样等等都要通过ActionContext来拿。
ActionContext类中以下几个方法为其常用:
Static ActionContext getContext(): 获取ActionContext实例;
Object get(Object key): 类似于request.getAttribute(String name);
Map getParameters():获取所有的请求参数,类似于request.getParameterMap();
Map getApplication(): 相当于ServletContext实例,返回的是Map对象
Map getSession() :返回类似于HttpSession的实例
void setApplication(Map application): 直接传入一个Map实例,将Map实例里的key-value对转换成application的key-value
void setSession(Map session): 直接传入一个Map实例,将Map实例里的key-value对转换成session的key-value
我们的后台放了request,session,application这三个东西都是map,但是它反馈到前台之后居然用request,session,application可以拿到,所以struts2一定帮我们在Map和HttpRequest之间建立某种联系,对于我们自己设定的map类型的request这里面的属性在处理的过程中会全都复制到Http对象里边去。应该就是用void setApplication(Map application),void setSession(Map session)做的处理
在jsp中
第一种访问request里面的值:<%=request.getAttribute("r1") //原始的方式
第二种访问request里面的值:<s:property value="#request.r1"/>
2.IoC方式 IoC(控制反转)是Spring里面的特征之一(最常用)
import java.util.Map; import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware { private Map<String, Object> request; private Map<String, Object> session; private Map<String, Object> application; //DI dependency injection //IoC inverse of control public String execute() { request.put("r1", "r1"); session.put("s1", "s1"); application.put("a1", "a1"); return SUCCESS; } @Override public void setRequest(Map<String, Object> request) { this.request = request; } @Override public void setSession(Map<String, Object> session) { this.session = session; } @Override public void setApplication(Map<String, Object> application) { this.application = application; } }
一个请求过来Struts会new出一个Action出来;2.new完之后它会检查Action是否实现了RequestAware接口.3如果Action实现了RequestAware接口,就可以调用RequestAware接口的setRequest()方法.
而且其实request我们也很少去拿它,因为我们Action的成员变量默认会起到request的作用,它自己会放到valueStack里面, valueStack本身就是放到request里面,所以根本不用去拿request.
3、
import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction3 extends ActionSupport { private HttpServletRequest request; private HttpSession session; private ServletContext application; public LoginAction3() { request = ServletActionContext.getRequest(); session = request.getSession(); application = session.getServletContext(); } public String execute() { request.setAttribute("r1", "r1"); session.setAttribute("s1", "s1"); application.setAttribute("a1", "a1"); return SUCCESS; } }
4、
import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.interceptor.ServletRequestAware; import com.opensymphony.xwork2.ActionSupport; public class LoginAction4 extends ActionSupport implements ServletRequestAware { private HttpServletRequest request; private HttpSession session; private ServletContext application; public String execute() { request.setAttribute("r1", "r1"); session.setAttribute("s1", "s1"); application.setAttribute("a1", "a1"); return SUCCESS; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; this.session = request.getSession(); this.application = session.getServletContext(); } }
总结:
第一种方法依赖于Struts2容器,取得相关对象数据;
第二种方法,依赖注入DI(dependency injection),控制反转IoC(Inverse of control),对象数据被容器注入;
第三种方法,依赖于容器取得相关对象数据;
第四种方法,依赖注入一个对象的数据后,再通过这个对象获取到其它对象数据。
推荐使用第二种方法。 [color=red][/color]
发表评论
-
8、struts2拦截器
2012-09-05 20:58 721转载自http://downpour.iteye.com/bl ... -
7、OGNL表达式
2012-09-01 11:37 695<li>访问值栈中的action的普通属性: ... -
5、struts2 action获取参数的三种方法
2012-08-31 10:58 8781:ModelDriven方式: <body> ... -
0、Struts2的运行机制
2012-08-31 10:10 702当你在客户端敲http://localhost:8080/st ... -
4、配置struts2中调用action的方法
2012-08-31 09:56 787Action执行的时候并不一定要执行execute方法 1.配 ... -
2.2、Struts2数据验证续
2012-08-31 06:53 798用struts2标签库来实现Str ... -
2.1、Struts2数据验证
2012-08-30 12:00 1650进行数据验证的action的执行流程: 当Client ... -
2.3、struts freemarker
2012-08-30 07:39 1012FreeMarker是一个非常优秀 ... -
3、struts2中的jsp页面链接的路径问题
2012-08-30 07:18 854struts2中的jsp页面链接的路径问题是根据action的 ... -
2、struts2的action及result总结
2012-08-29 17:58 12501、action 具体视图的返回可以由用户自己定义的Actio ... -
1、struts2 namespace总结
2012-08-29 17:09 846struts2.2.1 1.namespace namesp ...
相关推荐
总结来说,Struts2提供了多种途径来访问和管理request、session和application的数据,包括ActionContext、ValueStack、OGNL和拦截器。掌握这些方法将有助于提高开发效率和代码质量,同时也能更好地理解和优化基于...
在Struts2中,访问Web资源,如application、session和request,是常见的操作,这有助于实现数据共享和传递。本示例代码将帮助开发者更好地理解和运用这些功能。 一、Application域对象 Application域对象在所有用户...
### Struts2 访问 Request、Session 和 Application 作用域详解 #### 一、引言 Struts2 是一个基于 Java 的开源 Web 开发框架,它继承了 Struts1 的优秀特性并进行了改进,提供了更加灵活和强大的功能。在 Struts2...
在Struts2中,访问request、session和application对象是进行数据共享和传递的重要手段。这篇学习笔记主要探讨了如何在Struts2框架下有效地利用这三种域对象。 首先,request对象代表一次HTTP请求,它存储的数据仅...
默认情况下,Struts2已经配置了一些拦截器,例如`servletConfig`拦截器,它可以提供对servlet API的访问,包括request、response、session等。 在Action中,可以直接调用`ServletActionContext.getRequest()`、`...
在Struts2框架中,理解并正确使用request、response、session和application范围对于有效地管理数据和状态至关重要。这些范围帮助我们在Web应用程序中实现逻辑和数据流的分离,提高代码的可维护性和可扩展性。通过...
4. 命名对象:包括在Servlet作用范围内的对象信息,如Request、Session、Application等。 在实际开发中,开发者可以通过OGNL表达式访问值栈中的Action属性、对象和其他信息。例如,使用标签可以输出Action中的属性...
Struts2是一个流行的Java web开发框架,其核心特性之一就是丰富的标签库,这些标签极大地简化了视图层的开发工作。在本教程中,我们将深入理解Struts2的标签库,包括它们的分类、使用方法以及与OGNL(Object-Graph ...
在Struts2中,OGNL上下文被扩展为一个更复杂的结构,包含request、session、application、context map、OgnlValueStack等层次。OgnlValueStack(或简称为value stack)是核心,它是一个栈结构,通常包含用户对象、...
它有内置对象如request、response、session、application等,方便处理HTTP请求和响应。 - **EL(Expression Language)**:EL简化了在JSP中获取和设置属性值的方式,无需编写Java脚本,使得JSP更加简洁。 - **JSTL...
总结一下,Struts2中访问Web元素的主要方法是通过`ActionContext`获取`request`、`session`和`application`对象,从而实现数据的存储和共享。这些元素对于构建动态Web应用至关重要,因为它们使得服务器能够跟踪和...
2. `s:debug`: 用于在页面上输出详细的调试信息,包括所有Action的属性、Session、Request和Application范围内的变量。 3. `s:iterator`: 迭代集合对象,如数组、列表或Map。可以遍历集合中的每个元素并显示。 三...
Struts2 标签可以访问不同的作用域的类,例如 request、session、application 等。 标签的优点 Struts2 标签库提供了主题、模板支持,极大地简化了视图页面的编写,而且,Struts2 的主题、模板都提供了很好的扩展...
Struts2 框架提供了多种方式来访问 Servlet API,包括使用 ActionContext 类、实现接口和使用 ServletActionContext 类等。在本文中,我们将详细介绍 Struts2 访问 Servlet API 的几种方法。 一、使用 ...
`AttributeMap`是一个特殊的类,它可以用来获取所有作用域内的值,包括`request`、`session`和`application`范围内的数据。 #### 三、接口实现 为了能够访问这些作用域,Struts2提供了几个接口,开发者可以根据...
6.struts2-core-2.2.1.jar 7.xwork-core-2.2.1.jar 注意,之前的版本使用ognl时不需要javassist这个类库,但是现在的版本则需要。 二、EL表达式(JSP EL) EL表达式的目的是为了使JSP写起来更加简单。 A、语法...
通过`ServletActionContext.getRequest()`、`request.getSession()`和`session.getServletContext()`等方法,可以直接获取到这些对象的实例,从而进行更底层的操作,比如读取请求参数、管理会话状态或访问全局应用...
在Struts2中,ActionContext不仅仅是获取request和response的工具,它还包含了其他有用的上下文信息,如session、application等。例如,你可以通过ActionContext获取session中的数据: ```java Map, Object> ...
ValueStack是Struts2框架中的核心概念,它是一个对象栈,包含了Action对象、模型对象以及不同作用域的固定名称对象(如#application、#session、#request等)。值栈使得标签库可以直接访问对象,而不需要在视图层和...