在struts2中如何实现像jsp中request,session,appliaction的使用。其实有两种方法。下面通过一个案列来说明两个方法的使用。

先写一个test.java类

packagecom.test;

importjavax.servlet.ServletContext;

importjavax.servlet.http.HttpServletRequest;

importorg.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;

public class Test {

publicString myMethod(){

ActionContext actionContext=ActionContext.getContext();

actionContext.put("req", "这是一个request");

actionContext.getSession().put("sess", "这是一个seesion");

actionContext.getApplication().put("app", "这是一个application");

return "aa";

}

public String myMethod2()throws Exception{

HttpServletRequestrequest=ServletActionContext.getRequest();

request.setAttribute("req2", "这是一个request2");

request.getSession().setAttribute("sess2", "这是一个seesion2");

ServletContext context=ServletActionContext.getServletContext();

context.setAttribute("app2", "这是一个application2");

return "bb";

}

}

这里面method和method2方法是分别实现request,session,application的例子。不过在正常情况下建议使用方法一。

然后在struts2.Xml中:

<package name="fish"namespace="/test" extends="struts-default">

<action name="redfish"class="com.test.Test" method="myMethod">

<result name="aa">/index.jsp</result>

</action>

<action name="bluefish"class="com.test.Test" method="myMethod2">

<result name="bb">/index.jsp</result>

</action>

</package>

最后在index.jsp中写

${applicationScope.app}<br>

${sessionScope.sess}<br>

${requestScope.req}<br>

${applicationScope.app2}<br>

${sessionScope.sess2}<br>

${requestScope.req2}<br>

我们在浏览器中输入

http://127.0.0.1:8080/struts2test5/test/redfish

可以看到

我们接着在浏览器中输入:

http://127.0.0.1:8080/struts2test5/test/bluefish

可以看到

我们不仅可以看到后面3个,还可以看到前面两个,这更可以说明一个时间session和appliaction的生命周期。

那么如何实现这些request,session,application来实现一个对  对象的封装和拆箱呢。

我们可以在test.JAVA再加一个方法

publicString myMethod3(){

ActionContext actionContext=ActionContext.getContext();

actionContext.getSession().put("sess3",Arrays.asList("雅酷","飞鱼","李四") );

return "cc";

}

}

然后再struts2.XML再加一个action

<action name="yellowfish"class="com.test.Test" method="myMethod3">

<result name="cc">/index.jsp</result>

</action>

在index.JSP加入内容的同时先引入两个jar一个是jstl和standar。使用标签就行遍历。

在jsp的head先加

%@tagliburi="http://java.sun.com/jsp/jstl/core" prefix="fish" %

然后在jsp的body中加入

<fish:forEach items="${sess3}" var="name">

${name}<br>

</fish:forEach>

我们接着在浏览器中输入:

http://127.0.0.1:8080/struts2test5/test/yellowfish

我们可以看到:

对象被遍历出来,但是上面有两句,这次我们已经把服务器停了。却还有两句话,因为session其实他是有生命时间的。所以session的生命周期在随着服务器的关闭而消失是不是很严谨的。Session其实底层是用cookies来完成的。

struts2对一些属性的使用和对session封装对象类型采用jstl技术的遍历(配图解)的更多相关文章

  1. struts2(三)之表单参数自动封装与参数类型自动转换

    前言 对struts2的使用不外乎这几点,参数自动封装,拦截器的使用,数据校验,ognl表达(值栈和actionContext的讲解),struts2的标签,struts2的国际化, struts2的 ...

  2. struts2各个功能详解(1)----参数自动封装和类型自动转换

    struts2里面的各个功能,现在确实都不清楚,完全属于新学! 通过前面的例子,有时就会疑问,这些jsp中的数据信息是怎么传送给action的?例如: <form action = " ...

  3. Struts2学习(二)———— 表单参数自动封装和参数类型自动转换

    前篇文章对struts2的一个入门,重点是对struts2的架构图有一个大概的了解即可,之后的几篇文章,就是细化struts2,将struts2中的各种功能进行梳理,其实学完之后,对struts2的使 ...

  4. Lodop打印项对象类型属性区分

    Lodop提供了一些打印项类型,默认是普通项,通过设置打印对象的类型,可以实现一些普通项不能实现的效果.例如:该博客另一篇博文 标题是Lodop打印控件 打印‘接下一页’‘以下空白’,就用了眉脚项. ...

  5. Struts2中的数据处理的三种方式对比(Action中三种作用域request,session,application对象)

    1:在Action中如何获得作用域(request,session,application)对象: 取得Map(键值对映射集)类型的requet,session,application; 对数据操作的 ...

  6. JS属性描述符之Object.defineProperty()定义对象属性特性

    一.Object.defineProperty的作用 用来给对象新增属性,和修改对象中的属性. 二.JS对象中的描述符 js对象中两种属性描述符:数据描述符和存取描述符(访问描述符). 注意事项: 1 ...

  7. struts2下velocity做视图如何访问request,session等内置对象,如:原来webwork的$req

    struts2下velocity做视图如何访问request,session等内置对象(转) velocity 内置对象 struts2 requestStruts2环境下用velocity做视图时访 ...

  8. Spring_day01--注入对象类型属性(重点)_P名称空间注入_注入复杂类型属性_IOC和DI区别_Spring整合web项目原理

    注入对象类型属性(重点) Action要new一个service对象,Service中又要new一个Dao对象,现在把new的过程交给spring来操作 1 创建service类和dao类 (1)在s ...

  9. js对象—类型和属性特性

    前言 权威指南中摘要的,工作中用不到的,重要的js基础. 三类对象两类属性 内置对象(native object) 是由ECMScript规范定义的对象或者类.例如:函数,数组,日期,正则... 宿主 ...

随机推荐

  1. hadoop——在命令行下编译并运行map-reduce程序 2

     hadoop map-reduce程序的编译需要依赖hadoop的jar包,我尝试javac编译map-reduce时指定-classpath的包路径,但无奈hadoop的jar分布太散乱,根据自己 ...

  2. Android 着色器 Tint 研究

    Tint 这个东西 主要用来减少apk体积的,比如说我现在有一个textview,他的背景图 有两种,一种是当获得焦点时显示的a图,另一种是 失去焦点时显示的b图. 相信大家开发的时候 这种需求做过很 ...

  3. Android 高仿微信 获取最近刚刚拍照的缩略图 功能实现

    原理其实挺简单的,android 中文件 修改 增加 删除等等 都会在数据库里的某个表里记录下来,你需要的时候 只要迅速的去查找这个表里的值 即可得到你想要的所有信息. 实际上 如果真正理解这个表结构 ...

  4. MySQL中批量插入数据

    不管怎么样, 你需要大量的数据, 那么问题来了, 怎么快速地插入呢? 1. 这是我创建的一个批量插入的存储过程… 当然, 你可以把参数去掉, 一次性插入1W, 10W… CREATE DEFINER= ...

  5. bzoj1251 序列终结者(splay)

    人生第一发splay,写得巨丑,最后忘记了push_down以后要将子节点maintain 9k代码不忍直视 #define NDEBUG #include<cstdio> #includ ...

  6. Chapter6:函数

    执行函数的第一步是(隐式地)定义并初始化它的形参.所以,函数最外层作用域中的局部变量也不能使用与函数形参一样的名字. 局部静态变量:在程序的执行路径第一次经过对象定义语句时初始化,并且直到程序终止才被 ...

  7. focus与定位

    <html> <head> <script type="text/javascript" src="/jquery/jquery.js&qu ...

  8. 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误

    原因1:给定目录下jvm.dll不存在. 对策:(1)重新安装jre或者jdk并配置好环境变量.(2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本不一致 ...

  9. sysctl.conf

    linux系统接口 允许改变正在运作linux系统接口Tcp/IP堆栈和虚拟内存系统的高级选项 用来控制Linux网络配置/proc/sys/net/core/ TCP/IP参数修改添加到/etc/s ...

  10. 【126】win8的一些问题

    1.win8 窗口背景色修改 在Windows默认主题下,打开注册表编辑器(win键+R,即运行,输入regedit),依次双击打开HKEY_CURRENT_USER\Control Panel\Co ...