• struts2拦截器的故事


            拦截器体系是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>子元素;如下图:

          

           除此之外,还可以把多个拦截器连在一起成为拦截器栈,例如,如果需要在action执行前同时做登陆检查,安全检查和记录日志;则可以把这三个动作对应的拦截器设置一个拦截器栈;定义拦截器栈中使用<intercepor-stack……>元素,拦截器栈是由多个拦截器组成的,所以需要使用<intercepor-ref>元素来定义多个拦截器引用,即该拦截器栈由多个<intercepor-ref>元素指定的拦截器组成;

           从程序结构上看,拦截器栈是由多个拦截器组成,即一个拦截器栈包含了多个拦截器;但从程序功能上来看,拦截器栈和拦截器时统一的;它们的包含的方法都会在action的execute方法执行之前自动执行。实际上,我们完全可以拦截器栈当成一个更大的拦截器;

          

         关于struts2的拦截器讲解先到这里,后期会有进一步的整理和总结,如果有更好的建议,欢迎大家来拍砖; 

      



  • 相关阅读:
    只有APE文件的情况下自己制作CUE文件的方法转,经过本人验证真实可靠good!20101128终极解决版
    无法加载登录用户界面DLL MyGina.dll 解决
    sql2000_简单入门,以前的笔记
    dell_又一例:raid的变化(断电后,可能没有电池造成)
    MSSQL使用帮助租赁空间后的数据库链接
    PS创建动作并利用批处理命令自动处理多图片转
    office2003修复安装,缺少SKU011.CAB文件_解决
    使用双wan口的企业/校园网解决方案初探
    我机也中病毒MS Driver Management Service(原创)
    win2003开机有问题:Windows 无法查询 {7B849a69220F451EB3FE2CB811AF94AE} 的 DllName 注册表项,它将不会被加载。最有可能的原因是注册错误。
  • 原文地址:https://www.cnblogs.com/xzpblog/p/5117904.html
Copyright © 2020-2023  润新知