前言

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

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

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

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

拦截器的原理

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

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

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

理解DRY(Don'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的配置更加灵活而不影响框架的不论什么操作。而且体现了高度复用与扩展的思想。这不就是面向对象的体现么,可见拦截器的设计巧妙。从这里我们也能体会出。当我们遇到问题,就要去变,去抽象,去封装。让我们的代码越写越少。维护方便,效率高。

【跟我一步一步学Struts2】——拦截器的更多相关文章

  1. Struts2拦截器的使用 (详解)

    Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...

  2. 基于SSH2框架Struts2拦截器的登录验证实现(转)

        大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了.那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证.     修改数 ...

  3. Struts2拦截器登录验证

    Struts2拦截器 Struts2拦截器的概念和Spring Mvc拦截器一样. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截 ...

  4. Struts2拦截器配置实例

    拦截器介绍 拦截器 的使用 ,源自Spring AOP(面向切面编程)思想 拦截器 采用 责任链 模式 * 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链. * 责任链每一个节 ...

  5. struts2(五)之struts2拦截器与自定义拦截器

    前言 前面介绍了struts2的输入验证,如果让我自己选的话,肯定是选择xml配置校验的方法,因为,能使用struts2中的一些校验规则,就无需自己编写了, 不过到后面应该都有其他更方便的校验方法,而 ...

  6. struts2拦截器interceptor的配置方法及使用

    转: struts2拦截器interceptor的配置方法及使用 (2015-11-09 10:22:28) 转载▼ 标签: it 365 分类: Struts2  NormalText Code  ...

  7. Struts2拦截器和标签

    一.struts2拦截器 1.struts2是框架,封装了很多的功能,struts2里面封装的功能都是在拦截器里面. 2 struts2里面封装了很多的功能,有很多拦截器,不是每次这些拦截器都执行,每 ...

  8. 深入分析JavaWeb Item47 -- Struts2拦截器与文件上传下载

    一.struts2中的拦截器(框架功能核心) 1.过滤器VS拦截器 过滤器VS拦截器功能是一回事. 过滤器是Servlet规范中的技术,能够对请求和响应进行过滤. 拦截器是Struts2框架中的技术. ...

  9. struts2动态调用+Servlet过滤器+struts2拦截器

    周末真的是懒到心慌...... 本文是在完整s2sh项目基础上添加的,不太了解s2sh项目构建的朋友可以先参考一下这几篇文章: eclipse环境下基于tomcat-7.0.82构建struts2项目 ...

  10. 防止未登录用户操作—struts2拦截器简单实现(转)

    原文地址:http://blog.csdn.net/zhutulang/article/details/38351629 尊重原创,请访问原地址 一般,我们的web应用都是只有在用户登录之后才允许操作 ...

随机推荐

  1. Gradle for Android 第三篇( 依赖管理 )

    依赖管理 这会是一个系列,所以如果你还没有看我之前的几篇文章,请先查看以下文章: Gradle for Android 第一篇( 从 Gradle 和 AS 开始 ) Gradle for Andro ...

  2. 英语发音规则---B字母

    英语发音规则---B字母 一.总结 一句话总结: 1.B发[b]音? bike [baɪk] n. 自行车 bus [bʌs] n. 公共汽车 bag [bæg] n. 袋:猎获物 baby ['be ...

  3. 机器学习之线性分类器(Linear Classifiers)——肿瘤预测实例

    线性分类器:一种假设特征与分类结果存在线性关系的模型.该模型通过累加计算每个维度的特征与各自权重的乘积来帮助决策. # 导入pandas与numpy工具包. import pandas as pd i ...

  4. 关于volatile的一些思考C++

    在c++中,volatile用与修饰容易变动的变量,通常用于多线程的标志,编译器会存在代码优化,假如在同一个大括号中没有修改这么一个参数,那么编译器很可能在读取这个值的时候使用的是快取的方法,即将这个 ...

  5. 2.linux系统命令详解

    1 shell shell:命令解释器,根据输入的命令执行相应命令. 1.1 shell家族 察看当前系统下有哪些shell: cat /etc/shells 察看当前系统正在使用的shell ech ...

  6. iis 部署

    配置错误1: 由于权限不足而无法读取配置文件 建立一个新用户,分配所有权限 http://blog.csdn.net/jaychouliyu/article/details/7237143 配置错误2 ...

  7. flask-alembic数据迁移工具

    alembic是用来做ORM模型与数据库的迁移与映射.alembic使用方式跟git有点类似,表现在两个方面, 第一,alemibi的所有命令都是以alembic开头: 第二,alembic的迁移文件 ...

  8. Redis学习笔记(一) 初识 Redis

    简介 我所在的公司是一个以线下业务为主的公司,软件这一块的东西可以说是手工作坊,技术上的东西全靠大家自己折腾.最近也是觉得自己在社会主义的怀抱里安逸了太久,要提高思想政治觉悟,不能忘了资本主义的黑暗, ...

  9. nginx令牌限制并发

    http{ limit_req_zone $binary_remote_addr zone=req_one:10m rate=100r/s; server { listen 8080; server_ ...

  10. 探讨:crond 引发大量sendmail进程的解决办法

    某服务器账号comm无法登录,说是资源消耗完毕.于是用另一个账号登陆到服务器,检查common账号到底启动了哪些dd引起资源耗尽:ps -u common发现有个 sendmail的启动特别多例如:c ...