struts2的Preface

一、Struts2的执行过程
 1、StrutsPrepareAndExecuteFilter是核心控制器
  是由两部分组成的:StrutsPrepareFilter+StrutsExecuteFilter
  
  以下配置是等同的
  <filter>
   <filter-name>struts2</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
    </filter-mapping>
  --------------------------------
  <filter>
   <filter-name>Prepare</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
  </filter>
  <filter>
   <filter-name>Execute</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>Prepare</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <filter-mapping>
   <filter-name>Execute</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>
 2、总结StrutsPrepareFilter+StrutsExecuteFilter
  a、这是Struts2中的核心控制器,映射路径一般映射到/*。只有action或没有后缀的请求才真正经过Struts2的框架进行处理
  b、如果用到了其他的自定义的过滤器,但是没有用到Struts2的环境,一定要配置在前面
  c、如果自定义的过滤器需要使用Struts2的环境,要把StrutsPrepareFilter+StrutsExecuteFilter进行拆分,把自定义的过滤器配置中间
  d、如果访问的路径以/struts/开头,说明要访问 struts2-core.jar中的静态资源,这些静态资源在 struts2-core.jar:org.apache.struts2.static中的和template文件夹中的
   
http://localhost:8080/day25_interceptors/struts/css_xhtml/checkbox.ftl
   就代表要获取template.css_xhtml文件夹中的checkbox.ftl文件。
 
二、拦截器
 1、Strut2中的一系列的核心功能都是由拦截器完成的
 2、所有的拦截器都必须直接或间接的实现com.opensymphony.xwork2.interceptor.Interceptor
 3、Interceptor接口有一个默认的实现:com.opensymphony.xwork2.interceptor.AbstractInterceptor拦截方法就是:public String intercept(ActionInvocation invocation)
 4、有一个类com.opensymphony.xwork2.interceptor.MethodFilterInterceptor,专门针对方法调用的拦截器,它继承了AbstractInterceptor,
  增加一些可配置的属性,
  Set<String> excludeMethods:不拦截的方法名称,多个方法以逗号分隔,可以在定义拦截器的时候进行配置
  Set<String> includeMethods:
 
三、ValueStack:OGNL表达式  s:debug
 1、OGNL:Object Graphic Navigation Lanaguage 比EL表达式强大很多。是apache的单独项目
http://ognl.apache.org
  Struts2中使用的表达式语言就是OGNL
 
  a、OGNL可以调方法
  b、Struts2中使用OGNL表达式必须使用Struts2的标签
  
 OGNL的上下文环境:contextMap,它是一个Map.访问其中的对象或属性要使用"#"
 OGNL还有一个根:root,访问其中的对象或属性直接写即可。Struts2中使用的CompoundRoot来表示这个根的。
 
 Struts2中的ValueStack中封装了OGNL取数据的contextMap和CompoundRoot.利用Struts2提供的<s:debug/>即可查看其中的东东
 
 Struts2中
  application是一个Map,等同于EL中的applicationScope
  session是一个Map,等同于EL中的sessionScope
  request是一个Map,等同于EL中的requestScope
  attr是一个Map:按照范围从小到大依次查找。
  
  parameters也是一个Map:代表请求参数,等同于EL中的paramValues
 2、ValueStack中的常用方法
  void push(Object obj):把对象压到根栈中的栈顶
  void set(String key,Object obj):
   判断栈顶是否是一个Map对象。如果不是创建一个HashMap对象,把参数key作为key,obj作为value放到HashMap中,再把HashMap对象压倒栈顶。
   如果当前栈顶的对象是一个HashMap,直接使用了该Map,把参数key作为key,obj作为value放到HashMap中
  void setValue(String expr, Object value):
    expr不是以“#”开头,设置栈顶的对象属性的值,如果栈顶对象没有该属性就报错了。
    expr是以"#"开头,并不报错,而是把expr作为key,value做value,放到了contextMap中。
    
  Object findValue(String expr):
   查找栈顶对象的属性的值,如果没有找到,到contextMap中继续查找。
  String findString(String expr):只能用户获取字符串类型的值
   Struts2框架在进行类型强转。
  

   Tips:根中数据不要使用#,contextMap中使用#
  mydate.date 不加#,在根中没找到(本来就没有mydate这个key),然后将mydate.date 作为一个整体,作为key 到大contextMap中 去找,但是没有,这个key所对应的value,然后就返回了一个null .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值