引言:在前面的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
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并修改登录页面便可发布测试

版权声明:本文为博主原创文章,未经博主允许不得转载。

在Action获取Scope对象的更多相关文章

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

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

  2. 17.在Action获取Scope对象

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 引言:在前面的Action操作中,关键就是Action中的exectue方法 ...

  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. 获取applicationContext对象的方法

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

  9. Strut2 的 Action获取JSP 页面参数的方法

    struts2 Action获取表单传值1.通过属性驱动式JSP:<form action="sys/login.action" method="post" ...

随机推荐

  1. 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点

    题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDat ...

  2. 使用 Apache poi 导入Excel

    本文主要记录Excel导入及模板下载,遇到的问题及注意事项. 第一节:Excel导入   1.如何获取Excel中的最大行,也就是最后一行? 2.如何获取有效行?有效行的定义是每一行记录中每一列中值都 ...

  3. 操作系统原理2——OS结构

    操作系统原理2——OS结构   计算机系统是由硬件系统和软件系统两部分组成, 操作系统是软件系统的一个组成部分,它是直接在硬件系统的基础上工作的,所以在研究操作系统之前,先必须对计算机系统的结构有一个 ...

  4. linux 新建分区 、格式化 并挂载的命令

    一.新建分区命令为 fdisk /dev/diskname fdisk命令为交互式命令 p:显示当前硬盘上的分区,包括没保存的改动 n:创建新分区 e:表示扩扩展分区 p:表示主分区 d:删除一个分区 ...

  5. 模拟C#的事件处理和属性语法糖

    1. [代码]SharpEvent.hpp /* * SharpEvent.hpp * *  Created on: 2014-5-5 *      Author: leoking *   Copyr ...

  6. AJAX+json+jquery实现预加载瀑布流布局

    宽度是一定的高度不定的瀑布流布局 也可以说是无缝拼图 当浏览器滚动到底部时候自动加载图片 加载的图片地址用json 在img.js里 ,还有正在加载动画是用 css3制作的 在ff等支持css3可以显 ...

  7. php数据结构课程---2、链表(php中 是如何实现单链表的(也就是php中如何实现对象引用的))

    php数据结构课程---2.链表(php中 是如何实现单链表的(也就是php中如何实现对象引用的)) 一.总结 一句话总结: php是弱类型语言,变量即可表示数值,也可表示对象:链表节点的数据域的值就 ...

  8. PyCharm 常用快捷键和设置

    pycharm常用快捷键 1.编辑(Editing) Ctrl + Space    基本的代码完成(类.方法.属性)Ctrl + Alt + Space  快速导入任意类Ctrl + Shift + ...

  9. Python基础-os、sys模块

    一,os模块import os ,sysos.system('ipconfig')#执行操作系统命令,获取不到返回结果 os.popen()#也可以执行操作系统命令,可以返回命令执行结果,但需要rea ...

  10. stl_queue.h

    stl_queue.h // Filename: stl_queue.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http:/ ...