转自: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对象的更多相关文章

  1. struts2.1.6教程三、在Action获取Scope对象

    引言:在前面的Action操作中,关键就是Action中的exectue方法,但是此方法并没有request.session.application等对象作为参数,自然就不能利用这些对象来操作.下面我 ...

  2. 在Action获取Scope对象

    引言:在前面的Action操作中,关键就是Action中的exectue方法,但是此方法并没有request.session.application等对象作为参数,自然就不能利用这些对象来操作.下面我 ...

  3. angularjs 获取$scope对象

    参考 https://blog.csdn.net/u011974399/article/details/77865293 angular.element("[ng-controller=xx ...

  4. 9.Struts2在Action中获取request-session-application对象

    为避免与Servlet API耦合在一起,方便Action类做单元测试. Struts2对HttpServletRequest.HttpSession.ServletContext进行了封装,构造了三 ...

  5. Struts2的Action中获取request对象的几种方式?

    通过ActionContext.getSession获取 通过ServletActionContext.getRequest()获取 通过SessionAware接口注入 通过ServletReque ...

  6. 在AngularJS的controller外部直接获取$scope

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/5560843.html ...

  7. ASP.NET Core DI 手动获取注入对象

    ASP.NET Core DI 一般使用构造函数注入获取对象,比如在ConfigureServices配置注入后,通过下面方式获取: private IValueService _valueServi ...

  8. JavaScript获取事件对象和目标对象

    在JavaScript开发中,经常需要获取触发某个事件的目标对象.让后根据目标对象进行不同的业务处理.下面展示通过JavaScript获取触发事件的事件目标对象.如下: Js代码 1 2 3 4 5 ...

  9. 获取applicationContext对象的方法

    方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new FileSystemXmlApplicationContext(&quo ...

随机推荐

  1. hdu1080 DP(类最长公共子序列)

    题意,有两个字符串,分别由四个字母构成,字母之间有不同的相似度,允许在两个字符串都按原顺序排列的情况下进行字母与字母之间的匹配,也可以让字母与空格匹配,即相当于在字符串中间加空格来一一匹配,每个字母与 ...

  2. RPC好,还是RESTful好?

    看到知乎上有这样一个问题 WEB开发中,使用JSON-RPC好,还是RESTful API好? 还有其他优秀的推荐方案吗? -------------------------------------- ...

  3. Oracle C#处理时间类型的Insert

    首先如果直接   parm.Value=DateTime.Now;   insert into table (TheTime)Value(@parm);   执行sql就会报错 ----------- ...

  4. web 纯 javascript 的MVC 实现的简单实践

    现在javascript是越来越火了,好多javascript框架随之产生,大大简化了我们的开发,一般的开发模式大家是比较喜欢MVC 的model controller view 这种模式 方便了我们 ...

  5. BZOJ 1845三角形面积并

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1845 给定100个三角形,求三角形面积并. 戴神模板太可怕.直接调用函数秒掉.思路 ...

  6. JS 网页键盘钩子

    使用write技术把脚本和代码写入文件,即使查看原文及也无法看到原代码,下面是具体的代码,直接保存就可以运行============================================== ...

  7. MySql检测阻塞,锁等待sql

    ------------ 1分钟内产生binlog大小计算 select @a1:=VARIABLE_VALUE as a1from information_schema.GLOBAL_STATUSw ...

  8. Zeroc Ice 3.6.1 生成 vs2015 c++ 版本库及相关配置

    背景: 目前发布的Ice最新版本为3.6.0,使用的vs2013编译的,vs2015版本正在开发,发布只是时间问题: 不过官方实在给力,github上的源码已经支持vs2015编译了.源码版本为3.6 ...

  9. 学习笔记之ASP.NET MVC & MVVM & The Repository Pattern

    ASP.NET MVC | The ASP.NET Site https://www.asp.net/mvc ASP.NET MVC gives you a powerful, patterns-ba ...

  10. android手机版本

    1.判断安卓手机是64位,还是32位 adb pull /system/bin/cat file cat 32位 64位 2.判断安卓手机CPU是64位,还是32位 adb shell getprop ...