struts2拦截器的故事
2015-11-22 21:27
239 查看
拦截器体系是struts2框架的重要组成部分,我们可以它的拦截器看做是一个大型的空容器。对于任何mvc框架来说,他们都会完成一些通用的控制逻辑,将请求参数封装程dto,执行输入校验,解析文件上传中的文件域,防止表单的多次提交。
而struts2框架的绝大部分功能都是通过拦截器来完成的,当strutsPrepareAndExecuteFilter拦截到用户请求之后,大量拦截器讲会对用户的请求进行处理,然后才会调用用户开发的action实例方法来处理请求。在strtuts2中拦截器主要有内建拦截器和默认拦截器两种;
从struts框架来看,拦截器几乎完成了struts2框架70%的工作,包括解析请求参数,将请求参数赋值给action属性,执行校验,文件上传等;struts设计的灵巧性,更大程度的得益于拦截器设计,当需要扩展struts2功能时,只需要提供对应拦截器,并将它配置在struts2容器中即可;strtus2中内建了大量的拦截器,这些拦截器以name-class的形式配置在struts-default.xml文件中,其中name是拦截器的名字,也就是以后使用该拦截器的唯一标示,class则指定了该拦截器的实现类,如果我们定义的package继承struts2的默认struts-default 包,则可以自由使用下面定义的拦截器,否则必须自己定义这些拦截器;那么我们该如何配置呢?请继续往下看:
在struts.xml文件中定义拦截器只需要为拦截器指定一个拦截器名,就完成了拦截器定义,定义拦截器使用<interceptor/>元素来定义,定义拦截器最简单的格式如下:
<interceptor name="拦截器名称" class=“拦截器实现类”/>;
大部分时候,只需要通过上面的格式就可以完成拦截器的配置,如果还需要在配置拦截器时传入拦截器参数,则需要在<interceptor>元素中使用<param>子元素;如下图:
![](https://img-blog.csdn.net/20151122211803534?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
除此之外,还可以把多个拦截器连在一起成为拦截器栈,例如,如果需要在action执行前同时做登陆检查,安全检查和记录日志;则可以把这三个动作对应的拦截器设置一个拦截器栈;定义拦截器栈中使用<intercepor-stack……>元素,拦截器栈是由多个拦截器组成的,所以需要使用<intercepor-ref>元素来定义多个拦截器引用,即该拦截器栈由多个<intercepor-ref>元素指定的拦截器组成;
从程序结构上看,拦截器栈是由多个拦截器组成,即一个拦截器栈包含了多个拦截器;但从程序功能上来看,拦截器栈和拦截器时统一的;它们的包含的方法都会在action的execute方法执行之前自动执行。实际上,我们完全可以拦截器栈当成一个更大的拦截器;
![](https://img-blog.csdn.net/20151122212317026?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
关于struts2的拦截器讲解先到这里,后期会有进一步的整理和总结,如果有更好的建议,欢迎大家来拍砖;
而struts2框架的绝大部分功能都是通过拦截器来完成的,当strutsPrepareAndExecuteFilter拦截到用户请求之后,大量拦截器讲会对用户的请求进行处理,然后才会调用用户开发的action实例方法来处理请求。在strtuts2中拦截器主要有内建拦截器和默认拦截器两种;
从struts框架来看,拦截器几乎完成了struts2框架70%的工作,包括解析请求参数,将请求参数赋值给action属性,执行校验,文件上传等;struts设计的灵巧性,更大程度的得益于拦截器设计,当需要扩展struts2功能时,只需要提供对应拦截器,并将它配置在struts2容器中即可;strtus2中内建了大量的拦截器,这些拦截器以name-class的形式配置在struts-default.xml文件中,其中name是拦截器的名字,也就是以后使用该拦截器的唯一标示,class则指定了该拦截器的实现类,如果我们定义的package继承struts2的默认struts-default 包,则可以自由使用下面定义的拦截器,否则必须自己定义这些拦截器;那么我们该如何配置呢?请继续往下看:
在struts.xml文件中定义拦截器只需要为拦截器指定一个拦截器名,就完成了拦截器定义,定义拦截器使用<interceptor/>元素来定义,定义拦截器最简单的格式如下:
<interceptor name="拦截器名称" class=“拦截器实现类”/>;
大部分时候,只需要通过上面的格式就可以完成拦截器的配置,如果还需要在配置拦截器时传入拦截器参数,则需要在<interceptor>元素中使用<param>子元素;如下图:
除此之外,还可以把多个拦截器连在一起成为拦截器栈,例如,如果需要在action执行前同时做登陆检查,安全检查和记录日志;则可以把这三个动作对应的拦截器设置一个拦截器栈;定义拦截器栈中使用<intercepor-stack……>元素,拦截器栈是由多个拦截器组成的,所以需要使用<intercepor-ref>元素来定义多个拦截器引用,即该拦截器栈由多个<intercepor-ref>元素指定的拦截器组成;
从程序结构上看,拦截器栈是由多个拦截器组成,即一个拦截器栈包含了多个拦截器;但从程序功能上来看,拦截器栈和拦截器时统一的;它们的包含的方法都会在action的execute方法执行之前自动执行。实际上,我们完全可以拦截器栈当成一个更大的拦截器;
关于struts2的拦截器讲解先到这里,后期会有进一步的整理和总结,如果有更好的建议,欢迎大家来拍砖;
相关文章推荐
- JQuery+Strusts1.x无刷新登录
- java struts常见错误以及原因分析
- Struts之logic标签库详解
- struts2的select标签用法实例分析
- SSH框架网上商城项目第20战之在线支付平台
- java中struts 框架的实现
- sprng和struts有什么区别?
- SpringMVC+MyBatis项目总结(三)
- MyEclipse7.5+JDK1.6+Tomcat6+Struts1.3+MySQL4.1开发演示
- struts使用拦截器注解
- 懒到极致:对mybatis的进一步精简
- 浅谈struts1和struts2框架(转载+整理)
- Maven搭建struts2+spring+hibernate环境(二)
- Maven搭建struts2+spring+hibernate环境(三)
- 国内首创Java开发者的技术体系
- Struts知识
- struts 获取客户端真实ip
- 转载--Struts1.1 validation framework 使用中的若干经验
- 初探Struts + Hibernate(二) --从HQL中取值