在Action获取Scope对象
引言:在前面的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
implementsRequestAware,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赋值,但是在方式二中它是通过实现接口,在重写接口中的方法中完成对Maprequset的赋值,所以称之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
implementsServletRequestAware,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并修改登录页面便可发布测试
版权声明:本文为博主原创文章,未经博主允许不得转载。
在Action获取Scope对象的更多相关文章
- struts2.1.6教程三、在Action获取Scope对象
引言:在前面的Action操作中,关键就是Action中的exectue方法,但是此方法并没有request.session.application等对象作为参数,自然就不能利用这些对象来操作.下面我 ...
- 17.在Action获取Scope对象
转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 引言:在前面的Action操作中,关键就是Action中的exectue方法 ...
- 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 ...
- 获取applicationContext对象的方法
方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new FileSystemXmlApplicationContext(&quo ...
- Strut2 的 Action获取JSP 页面参数的方法
struts2 Action获取表单传值1.通过属性驱动式JSP:<form action="sys/login.action" method="post" ...
随机推荐
- Linux vim 中文显示乱码解决方法
因为在windows下默认是gb编码,而我的vim默认是utf-8(gedit默认也是utf-8),所以打开会成乱码.改动了一下配置文件,使vi支持gb编码就好了.$vi ~/.vimrclet &a ...
- iOS NSDateFormatter 不安全线程 处理
记得 上次我们开CodeReView大会 有人提出 " NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; ...
- 每天一个Linux命令(32)date命令
date命令是显示或设置系统时间与日期. (1)用法: 用法: date [选项] [参数] (2)功能: 功能: 根据指定格式显示 ...
- c的详细学习(4)选择结构与循环结构的编程练习
本节介绍c语言的编程实例. (1)求方程ax^2+bx+0的解: 方程有解有以下几种可能: 1.b^2-4ac=0,方程有两个相等实根. 2.b^2-4ac>0,方程有两个不等实 ...
- GetWindowRect和GetClientRect比较学习
一:关于坐标 MFC中绘图时经常涉及到坐标计算,GetWindowRect和GetClientRect这两个函数,是获取逻辑坐标系中窗口或控件(其实也是窗口)大小和坐标的常用函数了,有什么不一样的? ...
- Delphi UniDAC 通过http协议连接数据库的设置
Connection through HTTP tunnel(using http protocol) Sometimes client machines are shielded by a fire ...
- 算法(Algorithms)第4版 练习 2.1.27
package com.qiusongde; import edu.princeton.cs.algs4.StdOut; public class Exercise2127 { public stat ...
- 使用MapReduce将mysql数据导入HDFS
package com.zhen.mysqlToHDFS; import java.io.DataInput; import java.io.DataOutput; import java.io.IO ...
- hdu 1003 Max Sum(基础dp)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- Mysql总结_02_mysql数据库忘记密码时如何修改
1.从cmd进入mysql的bin下,输入命令 mysqld --skip-grant-tables 回车 注:(输入命令前,确保在任务管理器中已没有mysql的进程在运行,可输入命令:net s ...