zoukankan      html  css  js  c++  java
  • 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的拦截器讲解先到这里,后期会有进一步的整理和总结,如果有更好的建议,欢迎大家来拍砖; 

      



  • 相关阅读:
    UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)
    UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
    【Same Tree】cpp
    【Recover Binary Search Tree】cpp
    【Binary Tree Zigzag Level Order Traversal】cpp
    【Binary Tree Level Order Traversal II 】cpp
    【Binary Tree Level Order Traversal】cpp
    【Binary Tree Post order Traversal】cpp
    【Binary Tree Inorder Traversal】cpp
    【Binary Tree Preorder Traversal】cpp
  • 原文地址:https://www.cnblogs.com/xzpblog/p/5117904.html
Copyright © 2011-2022 走看看