ognl详细内容再此不赘述,详看当天笔记
ognl剖析:
contextmap是一次请求中包含所有数据的最大map集合
集合的键为 application,session,request,valuestack,action动作类对象,parameters请求参数,attr四大域中所有数据,
其中有五个map结构,一个对象,值栈是list结构,栈模型,先进后出,压栈弹栈,
actioncontext创建是在核心控制器的dofileter方法执行时,即web.xml执行过滤时,
actioncontext类只有一个带context参数的构造方法,context对象就是contextmap对象,
该类在contextmap被创建的时候一起被构造,该类中还有一个静态变量就是构造方法中的context,
后来的方法都是用来操作context,操作context就相当于操作contextmap
context对象用来获取application和session对象
request和page对象需要用ServletActionContext.get
细节:
遍历的时候iterator和foreach都能用,随便
modeldriven会自动压栈
编写工具类☆
先定义一个变量,创建方法怎么得到这个变量
工具类特点
要操作哪个对象,先定义出来,类中的方法都是操作该变量,
要操作该变量先要获得该对象
获得对象的方法有两种,一个是自己弄出来,另一个是别人给你传
<a href="javascript:delOne('${customer.custId}')">删除</a>
注意这种提交表单方式
拦截器
interceptor
过滤器可以过滤所有的请求
拦截器只能拦截action(类中方法)
基于动态代理(aop机制)实现的.在action执行之前或者之后添加一段逻辑.
多个拦截器称之为拦截器栈.
------------------------
struts执行流程:
请求-->StrutsPrepareAndExecuteFilter-->判断是否是action,若是action继续往核心走
|若是action的核心-->创建action的代理对象-->action的执行处理类(真正干活的类.通过高级的递归执行了所有的拦截器)-->
|执行action-->返回值(result)-->资源上-->倒序执行拦截器-->核心过滤器(StrutsPrepareAndExecuteFilter)放行方法之后的操作-->
|web服务器-->收到response,拆封组成成响应行 响应头 响应体,返回给浏览器
----------------------------
//
自定义拦截器
1.编写一个类
实现Interceptor或者继承AbstractInterceptor或者继承MethodFilterInterceptor
重写拦截的方法
2.编写配置文件(struts.xml)
方式1:
注册拦截器
在actoin中使用拦截器
方式2:
注册拦截器栈
在action中使用拦截器栈
注意:
注意:一旦显式的声明使用了某个拦截器,struts默认的拦截器就不好用了,若需要使用,必须手动的声明
若需要放行某个方法只需要按一下配置
<interceptor-ref name="Demo2Interceptor">
<!-- 不拦截execute方法了,若多个方法用逗号隔开 -->
<param name="excludeMethods">execute</param>
</interceptor-ref>
拦截器细节:
/=/index.jsp
action对象的.addActionError()和.addActionMessage()方法可以携带字符串数据到页面上
拦截器中可以用invocation.getAction()获取到action对象