struts2学习--解读struts.xml配置文件和值栈的学习

-- 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中找
	


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值