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

-- Struts2

一.解读核心配置文件struts.xml

1.常量设置
	a.设置访问路径后缀名
	
	b.开启动态调用方法
	
	c.静态方法的访问
	
	
2.标签
	
	
	a.name:包的名字,起名任意,但是必须唯一
	b.namespace:命名空间,以"/"开头,而且不能为空
	c.extends:一般继承包struts-default

3.标签
	
	
	a.name:请求路径的格式(package-namespace + action-name)
	b.method:指定action方法.默认是execute,如果不是需指定方法名,这里的方法名不带()
		       可能报的异常 java.lang.NoSuchMethodException
 		       最重要的一点是:有几个method就有几个action标签
 	c.class:类的全限定类名

4.标签

	a.name:指定action执行完毕所转向的资源视图,默认是"success"
	b.type:视图转向类型,共有11种,常用如下:
		--dispatcher:默认的,请求转发
		--redirect:重定向
			/XXX.jsp
			${username}
			utf-8
		   注意:username对应的是action中的属性名
			 uname是地址栏上的参数
		--redirectAction:重定向到action
			second
			注意:second是另一个action的name属性,而且不能带扩展名
		--chain:链

5.标签

6.获取ServletAPI
	ActionContext
	ServletActionContext--获取真正的API
	
二.OGNL与值栈

1.OGNL概念:
	OGNL有一个上下文的概念即Context,本质是一个Map,存放了很多Javabean对象.
	Struts2中用ActionContext作为上下文
	分为根对象(不使用标记直接访问)和非根对象(使用#访问)
	
2.值栈的创建
	用户提交请求,会马上创建一个Action对象和一个值栈对象OgnlValueStack(是接口ValueStack的实现类)
	
3.值栈的组成
	root:(根对象)
		 CompoundRoot类型,是增强版的ArrayList
	context:(非根对象)
		 Map类型

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);
		访问--
	d.直接添加有名对象
		valueStack.set("objName",obj);
	e.root本质是数组
		valueStack.getRoot().add(obj);

6.向root中隐式放入对象
	即操作action中的属性
	
7.向context中显式放入数据(#)
  	a.直接放入数据
  		ActionContext.getContext().put("objName",obj);
  		访问--
  		等同于--
  			 ${objName.属性名}/${requestScope.objName.属性名}
  	b.向session中放入数据
  		ActionContext.getContext().getSession().put("objName",obj);
  		访问--
  		      ${objName.属性名}/${sessionScope.objName.属性名}
  	c.向application中放入数据
  		ActionContext.getContext().getApplication().put("objName",obj);
   		访问--
	      	       ${objName.属性名}/${applicationScope.objName.属性名}
  	d.访问不存在的数据
  		

8.向context中隐式放入数据
	a.在提交Action请求时携带的参数,会自动放入context中的parameters属性中
	  如果Action中有该参数的属性,属性也放入root中	
				
 	b.Action对象
 	 	
 	 	
9.root中数据的加载顺序
	从root中读取数据,即直接访问,先去值栈中找,找不到再去context中找
	而带#访问,直接去context中找

10.request中数据的加载顺序
	先去request中找--再到root中找--最后去context中找
	


你可能感兴趣的:(struts)