struts2_part03_ognl★与过滤器

来源:互联网 发布:迪优美特网络机顶盒c6 编辑:程序博客网 时间:2024/06/05 19:09

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>

注意这种提交表单方式




拦截器


拦截器★(struts的核心)
interceptor
过滤器可以过滤所有的请求
拦截器只能拦截action(类中方法)
基于动态代理(aop机制)实现的.在action执行之前或者之后添加一段逻辑.
多个拦截器称之为拦截器栈.
------------------------
struts执行流程:
请求-->StrutsPrepareAndExecuteFilter-->判断是否是action,若是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对象