zoukankan      html  css  js  c++  java
  • 【跟我一步一步学Struts2】——拦截器

    前言 


          前面提到过拦截器。而且说拦截器仅仅能拦截Action。这里拦截器的调用体现了责任链模式。为什么说体现了责任链模式呢?

     

    以下的一段话说的非常明确:

              Struts2将整个运行划分成若干同样类型的元素,每一个元素具备不同的逻辑责任,并将它们纳入到一个链式的数据结构中。而每一个元素又有责任负责链式结构中下一个元素的运行调用。

             从代码重构的角度来看,实际上是将一个复杂的系统,分而治之。从而使得每一个部分的逻辑可以高度重用并具备高度可扩展性。

     

    拦截器的原理


              Struts2框架的拦截器是动态配置的,假设不须要使用某个拦截器仅仅须要在配置文件里取消应用就可以。应用某个拦截器在配置文件里配置就能够了。无论是否应用某个拦截器,对struts2的框架没有不论什么影响。

             我们还能够对拦截器进行扩展。

    由此体现出了拦截器可插拔的特性。

     

    理解DRYDon't Repeat Yourself)规则


            我们开发软件的时候会遇到这种情况。多个地方须要同样的代码段。于是我们就“复制”。“粘贴”,从功能上来说,实现了功能。假设是从软件的效率或者是软件的质量上来说是不合格的。

    从软件的维护上来说会非常恶心的。

     

    通过以下的图片会更好理解一些:


     


            通常有了反复的代码段我们会选择提取出来,做成一个公共的方法。让每一个模块去调用,可是假设如今我要改,不调用上面那个代码段,调用其它的一段代码,那么这三个模块都要手动改动。假设是放在拦截器里面,这时候系统就会自己主动去调用。方法的调用由系统来完毕,我们仅仅须要在配置文件里配置一下就可以。

     

           由此能够看出。拦截器实现了自己主动调用不同的方法体。甚至全然改变目标方法。拦截器强大的解耦功能在此体现的非常好。

     

    实例


    配置文件里拦截器的配置

    <packagename="struts2" extends="struts-default">

    <interceptors>

    <!--定义记录日志拦截器 -->

    <interceptorname="myLogInterceptor" class ="com.bjpowernode.struts2.MyLogInterceptor"/>

    <!--定义检查安全性拦截器 -->

    <interceptorname="mySecurityInterceptor"class="com.bjpowernode.struts2.MySecurityInterceptor"/>

     

    <!--拦截器栈 -->

    <interceptor-stackname="myInterceptorStack">

    <interceptor-refname="defaultStack"/>

    <!--自己定义拦截器-->

    <interceptor-refname="myLogInterceptor"/>

    <interceptor-refname="mySecurityInterceptor"/>

    </interceptor-stack>

     

    </interceptors>

    <!--定义为缺省拦截器,全部的Action都会得到使用 -->

    <default-interceptor-refname="myInterceptorStack" />

    <actionname="login"class="com.bjpowernode.struts2.LoginAction">

    <result>/login_success.jsp</result>

    <resultname="error">/login_error.jsp</result>

    </action>

    </package>

     

    总结


            从上面能够看出。拦截器是struts2的重要组成部分,使得struts2的配置更加灵活而不影响框架的不论什么操作。而且体现了高度复用与扩展的思想。这不就是面向对象的体现么,可见拦截器的设计巧妙。从这里我们也能体会出。当我们遇到问题,就要去变,去抽象,去封装。让我们的代码越写越少。维护方便,效率高。

  • 相关阅读:
    关于云计算的大局观
    定制WPF中的DataGrid控件支持对不同的实体类实现中文标题显示
    优化网站设计(二):使用CDN
    MVVM实践中的Command与CommandParameter的使用
    设计对浏览器更加友好的网站——整合搜索功能(针对Google Chrome)
    使用javascript脚本增强SharePoint Survey(调查)的功能
    学习和自我学习
    你应该如何更好地利用搜索引擎
    使用Project Linker实现多个项目中代码文件的链接
    SharePoint 2010 大局观(1~3)
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6919933.html
Copyright © 2011-2022 走看看