java struts2值栈ognl_Struts2的值栈和OGNL牛逼啊

Struts2的值栈和OGNL牛逼啊

一 值栈简介:

值栈是对应每个请求对象的一套内存数据的封装,Struts2会给每个请求创建一个新的值栈,值栈能够线程安全的为每个请求提供公共的数据存取服务。

二 OGNL介绍:

(1)基本数据:

OGNL 是对象图导航语言Object-GraphNavigationLanguage的缩写,它是一种功能强大的表达式语言。

OGNL 访问ValueStack数据

OGNL 访问ActionContext数据

访问某个范围下的数据要用#

#parameters 请求参数 request.getParameter(...);

#request 请求作用域中的数据 request.getAttribute(...);

#session 会话作用域中的数据 session.getAttribute(...);

#application 应用程序作用域中的数据 application.getAttribute(...);

#attr 按照 page request session application 顺序查找值

我们以例子理解这部分内容,设置HelloAction:

1 public class HelloAction extendsActionSupport{2 private static final long serialVersionUID = 1L;3 @Override4 public String execute() throwsException {5 //狭义上的值栈

6 ActionContext actionContext=ActionContext.getContext();7 ValueStack valueStack=actionContext.getValueStack();8 valueStack.set("name", "张三(ValueStack)");9 valueStack.set("age", 11);10 //session中的值

11 Map session=actionContext.getSession();12 session.put("name","王五(session)");13 session.put("age","13");14 //application中的内容

15 Map application=actionContext.getApplication();16 application.put("name", "赵六(application)");17 application.put("age","14");18 returnSUCCESS;19 }20 }

Struts.xml文件的配置:

1

2

3

4

5 success.jsp

6

7

8

前端页面success.jsp

1

2 pageEncoding="utf-8"%>

3

4

5

6

7

8

Insert title here

9

10

11 request.setAttribute("name","李四(request)");12 request.setAttribute("age","12");13 %>

14

15 值栈 获取的数据:

16

17

18 前台传递的数据:

19

20

21 request中的数据:

22

23

24 session中的数据:

25

26

27 application的数据:

28

29

30 attr取值 :

31

32

33

34

首先,是取值方式,

①值栈 直接取 比如说是name age就可以使用这种方式value=”name”  value=”age”

②page页面传递的数据 比如说是name age使用这种方式value="#parameters.name”  value="#parameters.age”

③requset设置的值 使用的方式 value="#request.name"    value="#request.age"

④session设置的值使用的方式 value="#session.name"      value="#session.age"

⑤application设置的值使用的方式value="#application.name"   value="#application.age"

之后attr的取值方式是按照page request session applicaiton这个顺序取得。

例如:attr获取的是request的值

713bac651d55278c32801cf1f41dd834.png

(2)OGNL访问静态方法和属性

Mystatic类:

1 public classMyStatic {2

3 public static final String str="yxs";4

5 public staticString printUrl(){6

7 System.out.println("http://www.yxs.com");8

9 return "http://www.yxs.com";10

11 }12

13 }

Static.jsp直接访问:

1

2 访问静态属性:

3 访问静态方法:

4

结果:

e0f3e302532cfe7db496216abcaac772.png

(3)OGNL 访问复杂对象

我们以javaBean对象为例:Student类

1 public classStudent {2 privateString name;3 private intage;4 publicStudent() {5 super();6 //TODO Auto-generated constructor stub

7 }8 public Student(String name, intage) {9 super();10 this.name =name;11 this.age =age;12 }13 publicString getName() {14 returnname;15 }16 public voidsetName(String name) {17 this.name =name;18 }19 public intgetAge() {20 returnage;21 }22 public void setAge(intage) {23 this.age =age;24 }25 }

Success.jsp文件:

1

2

3 ognl的javaBean值:

4

5

6 ognl的List集合:

7

8

9

10

11

12

13

14

15 ognl的Map:

16

17

18

19

20

21

22

HelloAction文件代码:

1 public class HelloAction extendsActionSupport{2 private static final long serialVersionUID = 1L;3 private Student student;//javaBean

4 private Liststudents;//list

5 private MapstudentMap;//Map

6 publicStudent getStudent() {7 returnstudent;8 }9

10 public voidsetStudent(Student student) {11 this.student =student;12 }13

14 public ListgetStudents() {15 returnstudents;16 }17

18 public void setStudents(Liststudents) {19 this.students =students;20 }21

22 public MapgetStudentMap() {23 returnstudentMap;24 }25

26 public void setStudentMap(MapstudentMap) {27 this.studentMap =studentMap;28 }29

30 @Override31 public String execute() throwsException {32 //TODO Auto-generated method stub

33

34 students=new ArrayList();35 student=new Student("小八",12);36 students.add(new Student("小酒",13));37 students.add(new Student("小石",14));38 students.add(new Student("十一",15));39 studentMap=new HashMap();40 studentMap.put("goodStudent", new Student("学霸",20));41 studentMap.put("badStudent", new Student("学渣",19));42 returnSUCCESS;43 }44 }

显示结果:

da76e84e4c1b29ed8eed845c1dee4804.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

还在用 Notepad++吗? 盘点五款更好用的文本编辑器

来自:oschina.net/news/110987/no-notepad-plus-plus | 责编:乐乐正文 Notepad 一直饱受争议,2018年开始然后引发了大家的关注,这里师长作为技术媒体,不方便带啥节奏,具体事件内容请大家自行百度。其实作…

SQL语言:嵌入式SQL知识笔记

1、概念SQL提供了将SQL语句嵌入到某种高级语言中的使用方式,通常采用预编译的方法将SQL语句嵌入高级语言中。采用的方法由DBMS的预处理程序对源程序进行扫码、识别出SQL语句,把它们转换为主语言调用语句,这样可以让主语言编译程序能识别它&am…

Mysql bat脚本编写_第一次编写bat脚本

** 前言 **今天中午在宿舍不想做什么事,于是想到傻怡的电脑太卡了,多方面原因造成的,多软件安装于系统盘、安装了没用的杀毒软件等等,但是对于windows系统来说呢,使用时间长了,会有很多的缓存文件、日志文件…

windows+caffe(三)——求取图片的均值

这个要在图片已经转化成lmdb格式下才能求均值。。。 1.查看caffe根目录下的bin是否存在compute_image_mean.exe(用的happey大神的) 如果没有存在,你需要打开MainBuilder.sln,右键compute_image_mean-仅用于项目-仅生成compute_ima…

硬盘知识:硬盘中蓝盘、绿盘、黑盘、红盘有什么区别?

今天给大家介绍一下电脑硬盘中蓝盘、绿盘、黑盘、红盘有什么区别?我们平常说的蓝盘、黑盘、红盘、绿盘这些通常指的是西部数据旗下所产的硬盘,通过各自的特点进行了上述的分类。从外观上我们可以通过硬盘上贴的纸的颜色来区分。绿盘:监控盘&a…

java 框架mvc_JAVA框架-MVC模式

MVCMVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。View(视图) - 视图代表模型包含的数据的可视化。Controller(…

ndk学习6: 使用gdb调试ndk程序一

生成debug版程序 方法一: 使用ndk-build编译时&#xff0c;加上如下参数NDK_DEBUG1&#xff0c;之后生成so文件之外&#xff0c;还会生成gdbobserver,gdb.setup调式文件 方法二: 修改AndroidManifest.xml文件,增加debuggable属性为true <application android:debuggable&quo…

后端:C#操作Mongodb用法笔记

MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。今天主要给大家介绍一下C#编程语言下Mongodb的用法。开发环境为VS2015示例主要包括数据的增删改查、分页查询、文件存储等功能。有需要的朋友可以一起学习一下。…

计算机语言分为三种:机器语言、汇编语言和高级语言

计算机语言有哪几种&#xff1f; 计算机语言分为三种&#xff1a;机器语言、汇编语言和高级语言 1.机器语言 机器语言是用二进制代码表示计算机能直接识别和执行的一种机器指令的集合&#xff0c;它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。 优点&#…

asp php java_ASP\JSP\PHP相比各有什么优缺点?

展开全部ASP、JSP、和PHP的优点e5a48de588b662616964757a686964616f31333366306538和缺点&#xff1a;一、ASP优点:1、无需编译2、易于生成3、独立于浏览器4、面向对象5、与任何ActiveX scripting 语言兼容6、源程序码不会外漏缺点:1、Windows本身的所有问题都会一成不变的也累…

js变量提升_学习笔记:JS中的作用域和预解析

知识总结&#xff1a;谢静贤、汤昊在javascript中作用域是非常重要的&#xff0c;本文将会说明作用域以及我们在工作&#xff0c;以及面试中的一些面试题&#xff0c;如果有不足的地方希望大家可以评论指出来&#xff0c;自己一定会及时的改正错误&#xff0c;避免大家走入一些…

ArcGIS Engine开发之旅09--几何对象和空间参考

1.Geometry Geometry 是 GIS 中使用最为广泛的对象集之一&#xff0c;用户在创建、删除、编辑和进行地理分析的时候&#xff0c;就是处理一个包含几何形体的矢量对象&#xff1b;除了显示要素意外&#xff0c;控件对象选择&#xff0c;要素符号化&#xff0c;标注要素&#xf…

项目管理:软件工程相关知识笔记

1、软件工程概念介绍软件工程是指应用计算机科学、数学、管理科学等原理&#xff0c;以工程化的原则和方法来解决软件问题的工程&#xff0c;其主要目的是提高软件生产率、提高软件质量、降低软件成本。2、软件工程学的组成软件开发技术&#xff1a;软件开发方法学、软件工具、…

android开发java环境_搭建Android开发环境 - Android - mobile - JavaEye论坛

Android的开发现在是如火如荼&#xff0c;逞现在不是很忙了&#xff0c;学习了下&#xff0c;这里记录下了在windows在如何搭建Android开发环境&#xff0c;对自己是个记录&#xff0c;对新入门的兄弟姐妹们可以参考一下&#xff01;(1)安装JDK&#xff0c;省略。(2)下载Androi…

updatebyprimarykeyselective的where条件是全部字段_ArcGIS 字段计算器

使用键盘输入值并不是编辑表中值的唯一方式。在某些情况下&#xff0c;为了设置字段值&#xff0c;可能要对单条记录甚至是所有记录执行数学计算。您可以对所有记录或选中记录执行简单计算和高级计算。此外&#xff0c;还可以在属性表中的字段上计算面积、长度、周长和其他几何…

项目管理基础:软件生命周期概念介绍

1、软件生命周期定义软件产品或软件系统要经历孕育、诞生、成长、成熟、衰亡等阶段称为软件的生命周期。2、软件生命周期阶段组成软件的生命周期由可行性分析与项目开发计划、需求分析、总体设计、详细设计、编码、单元测试、综合测试、维护阶段。2.1 可行性分析与项目开发计划…

jvm栈和寄存器

jvm栈和寄存器 总结