-- Struts2
一.解读核心配置文件struts.xml
1.常量设置
a.设置访问路径后缀名
<constant name="struts.action.extension" value="do,,"/>
b.开启动态调用方法
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
c.静态方法的访问
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
2.标签<package>
<package name="demo" namespace="/test" extends="struts-default">
a.name:包的名字,起名任意,但是必须唯一
b.namespace:命名空间,以"/"开头,而且不能为空
c.extends:一般继承包struts-default
3.标签<action>
<action name="login" class="com.bjpn.actions.LoginAction" method="doSome">
a.name:请求路径的格式(package-namespace + action-name)
b.method:指定action方法.默认是execute,如果不是需指定方法名,这里的方法名不带()
可能报的异常 java.lang.NoSuchMethodException
最重要的一点是:有几个method就有几个action标签
c.class:类的全限定类名
4.<result>标签
a.name:指定action执行完毕所转向的资源视图,默认是"success"
b.type:视图转向类型,共有11种,常用如下:
--dispatcher:默认的,请求转发
--redirect:重定向
<param value="location">/XXX.jsp</param>
<param value="uname">${username}</param>
<param value="charset">utf-8</param>
注意:username对应的是action中的属性名
uname是地址栏上的参数
--redirectAction:重定向到action
<result type="redirectAction">second</result>
注意:second是另一个action的name属性,而且不能带扩展名
--chain:链
5.<global-results>标签
6.获取ServletAPI
ActionContext
ServletActionContext--获取真正的API
二.OGNL与值栈
1.OGNL概念:
OGNL有一个上下文的概念即Context,本质是一个Map,存放了很多Javabean对象.
Struts2中用ActionContext作为上下文
分为根对象(不使用标记直接访问)和非根对象(使用#访问)
2.值栈的创建
用户提交请求,会马上创建一个Action对象和一个值栈对象OgnlValueStack(是接口ValueStack的实现类)
3.值栈的组成
root:(根对象)
CompoundRoot类型,是增强版的ArrayList
context:(非根对象)
Map<String,Object>类型
4.获取值栈对象
ValueStack valueStack = ActionContext.getContext().getValueStack();
5.向root中显式放入数据
a.对值栈的操作,本质上就是对根对象root的操作
valueStack.push(obj);
b.通过操作root
valueStack.getRoot().push(obj);
c.添加map,可以添加有名对象
map.put("objName",obj);
valueStack.push(map);
访问--<s:property value="objName.属性"/>
d.直接添加有名对象
valueStack.set("objName",obj);
e.root本质是数组
valueStack.getRoot().add(obj);
6.向root中隐式放入对象
即操作action中的属性
7.向context中显式放入数据(#)
a.直接放入数据
ActionContext.getContext().put("objName",obj);
访问--<s:property value="#objName.属性名"/>
等同于--<s:property value="#request.objName.属性名"/>
${objName.属性名}/${requestScope.objName.属性名}
b.向session中放入数据
ActionContext.getContext().getSession().put("objName",obj);
访问--<s:property value="#session.objName.属性名"/>
${objName.属性名}/${sessionScope.objName.属性名}
c.向application中放入数据
ActionContext.getContext().getApplication().put("objName",obj);
访问--<s:property value="#application.objName.属性名"/>
${objName.属性名}/${applicationScope.objName.属性名}
d.访问不存在的数据
<s:property value="#attr.objName.属性名"/>
8.向context中隐式放入数据
a.在提交Action请求时携带的参数,会自动放入context中的parameters属性中
如果Action中有该参数的属性,属性也放入root中
<s:property value="#parameters.参数名"/>
b.Action对象
<s:property value="#action.属性名"/>
9.root中数据的加载顺序
从root中读取数据,即直接访问,先去值栈中找,找不到再去context中找
而带#访问,直接去context中找
10.request中数据的加载顺序
先去request中找--再到root中找--最后去context中找
struts2学习--解读struts.xml配置文件和值栈的学习
最新推荐文章于 2018-07-18 17:20:28 发布