Servlet和action的区别
- servlet在第一次访问时被创建,并创建一次(单例)
- action也是在访问时创建,但会创建多次(每次都是一个新的action实例)
- 在action中保存数据的值栈对象也会随之而产生多个
OGNL 概述(Object-Graph Navigation Language)
- 表达式语言,比EL表达式更为强大,需要导入jar包
- 是独立的体系,不属于struts2
- 存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能
- 配合struts2的标签操作值栈数据(大有取代el的用意)
- 只能在jsp页面中使用
OGNL的使用
1. 导入jar包
2. 引入struts2标签库
值栈
1.概念:struts2中本身提供的一种数据操作的机制,类似之前servlet的域对象(域对象依然可以使用),它并不是用来替换域对象的,值栈可以和域操作同时存在互不影响(其实,值栈和域对象是有一定联系的),给我们操作数据提供了一种更适合sturts2的选择而已
2.值栈在每一个Action中都独立存在一份值栈对象
3.获取值栈对象
- 通过ActionContext,先调用getContext()方法,再调用getValueStack() 方法
- 通过ServletActionContext,调用getValueStack(request)方法,里面有参数
两种方法返回的对象是相同的
ValueStack valueStack = ServletActionContext.getValueStack(ServletActionContext.getRequest());
ValueStack valueStack1 = ActionContext.getContext().getValueStack();
s:debug标签
通过s:debug标签调试程序(上线的程序不能使用),查看值栈中的数据情况
在struts中添加常量(开启调试模式,老版本不需要):
<constant name="struts.devMode" value="true"></constant>
在jsp页面中添加debug标签
<s:debug></s:debug>