热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

JSP开发之Struts2内建自定义拦截器

这篇文章主要介绍了JSP开发之Struts2内建自定义拦截器的相关资料,需要的朋友可以参考下

JSP 开发之Struts2内建自定义拦截器

Struts2的自定义拦截器主要用于解析请求参数,将请求参数赋值给Action属性,执行数据校验,文件上传等等操作。当需要扩展Struts2的功能时,我们只需要提供相应的拦截器并将它配置到Struts2容器中即可;当我们不需要使用的时候,只需要取消它在Struts2容器中的配置就行了。

1>配置拦截器主要使用四个配置元素:

:用于配置自定义拦截器
:用于引用拦截器或者拦截器栈
:用于配置自定义拦截器栈,一个拦截器栈由多个拦截器构成,也可以包含其他的拦截器栈
:拥有配置参数



  ..
  ...




  
  
    ..
    ...
  
  
  


2>配置好了拦截器之后,就可以在元素中使用该拦截器了,使用自定义拦截器时,还必须显示使用系统默认的拦截器defaultStack。


  
  
  
    
    
    
    
  

3>用户自定义拦截器:Struts2提供了Interceptor拦截器原生接口:

public interface Interceptor extends Serializable
{
  //初始化拦截器的回调方法
  void init() ;
  //实现拦截的处理方法
  String intercept(ActionInvocation invocation) throws Exception ;
  //销毁拦截器之前的回调方法
  void destroy() ;
}

因此,用户自定义拦截器类需要实现该接口并提供该接口中的所有抽象方法的实现。不过Struts2还提供了该接口的一个直接实现类:AbstractInterceptor,该类提供了init()和destroy()方法的实现,我们只需要重写intercept()拦截方法即可:

public class simpleInterceptor extends AbstractInterceptor
{
  private String username ;
  private String password ;
  //omit setter and getter methods
  @Override
  public String intercept(ActionInvocation invocation) throws Exception 
  {
    //获取被拦截的Action实例
    LoginAction action = (LoginAction)invocation.getAction() ;
    System.out.println("开始拦截:" + new Date()) ;
    //取得开始执行Action处理方法的时间
    long start = System.currentTimeMillis() ;
    //回调执行Action被拦截的处理方法
    String result = invocation.invoke() ;
    System.out.println("结束执行:" + new Date()) ;
    //取得执行Action处理方法之后的时间
    Long end = System.currentTimeMillis() ;
    System.out.println("执行用时:" + (end-start) +"ms") ;
    return result ;
  }
}

上面提供的AbstractInterceptor类定义的拦截器会拦截Action内的所有处理方法,如果只想拦截指定的方法,或者想指定哪些方法拦截,哪些方法不拦截,可以使用Struts2提供的MethodFilterInterceptor类,该类是AbstractInterceptor类的子类,提供了下面三个主要的方法:

1>String doIntercept(ActionInvocation invocation) throws Exception:同intercept()方法作用一样
2>void setIncludeMethods(String includeMethods):设置需要被拦截的方法名
3>void setExcludeMethods(String excludeMethods):设置不需要被拦截的方法名

其中两个setter方法可以在配置该拦截器时通过param元素来指定属性值


  login,execute
  regiset

4>拦截器的执行顺序:如果有多个拦截器同时作用于一个Action上时,遵循:在Action的控制方法执行之前,先定义的拦截器先作用执行;在Action的控制方法执行之后,先定义的拦截器后作用执行;也就是在invocation.invoke()方法这个点进行分界

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


推荐阅读
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 处理docker容器时间和宿主机时间不一致问题的方法
    本文介绍了处理docker容器时间和宿主机时间不一致问题的方法,包括复制主机的localtime到容器、处理报错情况以及重启容器的步骤。通过这些方法,可以解决docker容器时间和宿主机时间不一致的问题。 ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • 开发笔记:Docker 上安装启动 MySQL
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker上安装启动MySQL相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了Java的公式汇总及相关知识,包括定义变量的语法格式、类型转换公式、三元表达式、定义新的实例的格式、引用类型的方法以及数组静态初始化等内容。希望对读者有一定的参考价值。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
  • C++语言入门:数组的基本知识和应用领域
    本文介绍了C++语言的基本知识和应用领域,包括C++语言与Python语言的区别、C++语言的结构化特点、关键字和控制语句的使用、运算符的种类和表达式的灵活性、各种数据类型的运算以及指针概念的引入。同时,还探讨了C++语言在代码效率方面的优势和与汇编语言的比较。对于想要学习C++语言的初学者来说,本文提供了一个简洁而全面的入门指南。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文介绍了Python函数的定义与调用的方法,以及函数的作用,包括增强代码的可读性和重用性。文章详细解释了函数的定义与调用的语法和规则,以及函数的参数和返回值的用法。同时,还介绍了函数返回值的多种情况和多个值的返回方式。通过学习本文,读者可以更好地理解和使用Python函数,提高代码的可读性和重用性。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
author-avatar
mobiledu2502938577
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有