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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值