17.在Action获取Scope对象
转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html
引言:在前面的Action操作中,关键就是Action中的exectue方法,但是此方法并没有request、session、application等对象作为参数,自然就不能利用这些对象来操作。下面我们建立struts2scope项目,并用四种方式来获取这些对象:
方式一、与Servlet解耦合的非IOC方式
获取的scope对象与容器无关,通过ActionContext获取。
LoginAction代码如下:
package com.asm;
public class
LoginAction extends
ActionSupport {
private String username;
ActionContext context;
Map request;
Map session;
Map application;
public String
execute() throws Exception {
context=ActionContext.getContext();
request=(Map)
context.get("request");
session=context.getSession();
application=context.getApplication();
request.put("req", "requst属性");
session.put("ses", "sesion属性");
application.put("app", "application属性");
return SUCCESS;
}
...省略username的get/set方法
}
struts.xml配置如下:
<struts>
<package name="scope"
extends="struts-default">
<action name="login"
class="com.asm.LoginAction">
<result>/loginSuc.jsp</result>
</action>
</package>
</struts>
login.jsp内容如下:
<form action="<%=request.getContextPath()
%>/login.action">
用户名:<input type="text"
name="username"><br>
<input type="submit"
value="login">
</form>
loginSuc.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>
分析:通过ActionContext的getContext静态方法得到ActionContext对象,然后ActionContext对象调用get方法来获取一个存储在request范围中的对象。我们使用el或通过request.getAttribute这样的方式均可以获取对象值,这说明了这些Map
request对象实际是存储在request范围内的对象。
方式二、与Servlet解耦合的IOC方式
我们建立Login2Action,主要代码如下:
package com.asm;
public class
Login2Action extends
ActionSupport implements
RequestAware,SessionAware,ApplicationAware {
private String username;
Map request;
Map session;
Map 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) {
this.request=request;
}
public void
setSession(Map<String, Object> session) {
this.session=session;
}
public void setApplication(Map<String,
Object> application) {
this.application=application;
}
...省略username的get/set方法
}
注册此Action的name为login2,随后修改登录提交为.../login2.action。便可以发布测试。说明:此方法其实和方式一很相似,只是在方式一中我们需要手动的为Map request赋值,但是在方式二中它是通过实现接口,在重写接口中的方法中完成对Map
requset的赋值,所以称之IOC方式。借助此例,略谈下依赖注入与控制反转:所谓依赖注入就是一个对象自己本身的初始化是依赖其它对象。比如这里Map request这些对象会依赖struts2来给其初始化,称为依赖注入,而依赖注入的就表示,这些对象的控制权不再由此类本身掌握,而是交给了别的对象,即是控制权反转了。 强调:方式二是开发中主要用的方式,应重点掌握
方式三、与Servlet耦合的非IOC方式
建立Login3Action,代码如下:
package com.asm;
public class
Login3Action extends
ActionSupport {
private String username;
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;
}
...省略username的get/set方法。
}
此方法获取的纯粹的Scope对象,它与容器相关,这些Scope对象操作更强。同样只需要注册此Action并修改登录页面便可进行测试。
方式四、与Servlet耦合的IOC方式
建立Login4Action,代码如下:
package com.asm;
public class
Login4Action extends
ActionSupport implements
ServletRequestAware,ServletContextAware{
private String username;
ActionContext context;
HttpServletRequest request;
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("测试:"+request);
this.request=request;
}
public void
setServletContext(ServletContext application) {
System.out.println("测试:"+application);
this.application=application;
}
...省略username的get/set方法
}
同样只需要注册此Action并修改登录页面便可发布测试
17.在Action获取Scope对象的更多相关文章
- struts2.1.6教程三、在Action获取Scope对象
		
引言:在前面的Action操作中,关键就是Action中的exectue方法,但是此方法并没有request.session.application等对象作为参数,自然就不能利用这些对象来操作.下面我 ...
 - 在Action获取Scope对象
		
引言:在前面的Action操作中,关键就是Action中的exectue方法,但是此方法并没有request.session.application等对象作为参数,自然就不能利用这些对象来操作.下面我 ...
 - angularjs 获取$scope对象
		
参考 https://blog.csdn.net/u011974399/article/details/77865293 angular.element("[ng-controller=xx ...
 - 9.Struts2在Action中获取request-session-application对象
		
为避免与Servlet API耦合在一起,方便Action类做单元测试. Struts2对HttpServletRequest.HttpSession.ServletContext进行了封装,构造了三 ...
 - Struts2的Action中获取request对象的几种方式?
		
通过ActionContext.getSession获取 通过ServletActionContext.getRequest()获取 通过SessionAware接口注入 通过ServletReque ...
 - 在AngularJS的controller外部直接获取$scope
		
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/5560843.html ...
 - ASP.NET Core DI 手动获取注入对象
		
ASP.NET Core DI 一般使用构造函数注入获取对象,比如在ConfigureServices配置注入后,通过下面方式获取: private IValueService _valueServi ...
 - JavaScript获取事件对象和目标对象
		
在JavaScript开发中,经常需要获取触发某个事件的目标对象.让后根据目标对象进行不同的业务处理.下面展示通过JavaScript获取触发事件的事件目标对象.如下: Js代码 1 2 3 4 5 ...
 - 获取applicationContext对象的方法
		
方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new FileSystemXmlApplicationContext(&quo ...
 
随机推荐
- jquery的常用操作(操作html页面的Dom对象的元素)
			
一:页面加载完成时,会执行jquery的方法(不需要等待图片加载完成,只要dom结构加载完成,就执行该方法) //第一种写法: $(document).ready(function() { // 执行 ...
 - Android中logcat和日志打印
			
一.logcat对日志过滤 1.# logcat --help # logcat --help Usage: logcat [options] [filterspecs] options inclu ...
 - php 中的引用
			
php 有类似 C 中的指针 &. 但在 php 中叫 引用. 虽然和 传地址很像,但是差别很大.(估计底层实现应该差不多,只是猜想,有机会再研究) 这里有一个关于 php 的对象的赋值其实就 ...
 - Oracle ASM 详解
			
ASM:Automatic Storage Management, 是Oracle 主推的一种面向Oracle的存储解决方案, ASM 和 RDBMS 非常相似,ASM 也是由实例和文件组成, 也可以 ...
 - ORACLE expdp/impdp详解
			
ORCALE10G提供了新的导入导出工具,数据泵.Oracle官方对此的形容是:Oracle DataPump technology enables Very High-Speed movement ...
 - Jenkins进阶-Gitlab使用Webhook实现Push代码自动部署(3)
			
1.Jenkins 安装完成以后,首先我们在Jenkins中需要安装一下,Gitlab Hook Plugin 插件: 2.插件安装完成我们创建任务,在任务重构建触发器下获取回调URL: 注意: 注意 ...
 - codevs2189数字三角形(%100)
			
题目:http://codevs.cn/problem/2189/ %100的话就加一维状态.把最优性改为可行性(存在性). #include<iostream> #include< ...
 - Microsoft Dynamics CRM 2011 批量添加域用户 然后添加CRM用户
			
一.先了解下 DSADD user命令详解 常见的批量创建用户的方法有四种: 一. 帐户模板的方式 二. CSVDE和LDIFDE 三. 脚本的方式 四. DSADD 但是很少有详细的资料使用DSAD ...
 - Google.ProtocolBuffers.dll 之.Net应用(一)
			
原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ http://www.cnblogs.com/wu-jian/archive/2011/02/22/1961 ...
 - springMVC学习(3)-springMVC和mybatis整合
			
一.需求:使用springmvc和mybatis完成商品列表查询. 二.整合思路:springMVC+mybaits的系统架构: 1步):整合dao层 mybatis和spring整合,通过sprin ...