[关闭]
@yudesong 2018-02-17T08:17:34.000000Z 字数 2076 阅读 665

Struts2 拾遗

Struts2


1. 参数传递

1.Action从页面取值  

2.页面从Action取值

2. OGNL

Object Graph Navigation Language,是一门功能强大的表达式语言,类似于EL。Strut2默认采用OGNL表达式访问Action的数据,实际上是通过ValueStack对象来访问Action。在Struts2中,OGNL表达式要结合Struts2标签来访问数据

  1. EL${user.userName} <==> OGNL:<s:property value="user.userName">
  2. a)访问基本属性  <s:property value="属性名"/>
  3. b)访问实体对象  <s:property value="对象名.属性名"/>
  4. c)访问数组/集合  <s:property value="someArray[1]"/> | <s:property value="someList[1]"/>
  5. d)访问Map  <s:property value="someMap.key" />
  6. e)运算  <s:property value="'My name is' + name" />
  7. f)调用方法  <s:property value="name.toUpperCase()" />
  8. g)创建集合  <s:property value="{'a','b','c'}" /> ArrayList
  9. h)创建Map  <s:property value="#{'mm':'MM','nn':'NN'}" />

3.ValueStack

是Struts2中,Action向页面传递数据的媒介,封装了Action的数据,并允许JSP通过OGNL来对其访问

  1. 访问ValueStack
  1. a)通过<s:debug>观察其结构
  2. b)输出栈顶:<s:property />
  3. c)访问Context对象:
  4. - OGNL表达式以"#"开头
  5. - key来访问context对象的值,即"#key"得到context中某属性值
  6. d)迭代集合 
  7. e)按数字迭代




2.ValueStack栈顶的变化

3.EL表达式访问ValueStack

4.Action基本原理

6大核心组件

5.拦截器

用途: 拦截器适合封装一些通用处理,便于重复利用。例如请求参数传递给Action属性,日志的记录,权限检查,事务处理等。拦截器是通过配置方式调用,因此使用方法比较灵活,便于维护和扩展。

使用步骤:
1. 创建拦截器组件(创建一个类,实现Interceptor接口,并实现intercept方法;也可以继承MethodFilterInterceptor,这种方式可以使action中某个方法不进行拦截)

  1. public String intercept(ActionInvocation invocation){
  2. //拦截器--前部分处理
  3. invocation.invoke();
  4. //拦截器--后续处理
  5. }
  1. 注册拦截器
  1. <package>
  2. <interceptors>
  3. <interceptor name="别名" class="实现类"/>
  4. <!--其他拦截器-->
  5. </interceptors>
  6. </package>
  1. 引用拦截器(哪个Action希望被拦截器扩展,需要在此action配置下,引用拦截器)
  1. <action>
  2.    <!--手动的使用一次系统默认的拦截器-->
  3.    <interceptor-ref name="defaultStack"/>
  4. <interceptor-ref name="拦截器别名"/>
  5. <!--可以写多个-->
  6.    <!--可以使用excludeMethods参数属性,设置不过滤的方法-->
  7. </action>
  1. 拦截器栈
  1. <interceptor-stack name="myStack">
  2. <interceptor-ref name="拦截器别名1"/>
  3. <interceptor-ref name="拦截器别名2"/>
  4. </interceptor-stack>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注