1)什么是自定义的拦截器

  所谓自定义的拦截器,就是由我们自己定义并实现的拦截器,而不是由Struts2定义好的拦截器。虽然Struts2的预定义拦截器已经满足了大多数情况的需要。但在有些时候,我们可能会根据项目的实际需要而自定义一些拦截器,来实现一些特别的功能。

  2)开发自定义拦截器

  其实在Struts2里面,要实现自定义的拦截器是非常简单的,只要写一个实现Interceptor接口的类就可以了。也就是说,所有的拦截器都要实现com.opensymphony.xwork2.interceptor.Interceptor接口,这个接口中定义如下:

public interface Interceptor extends Serializable {
void destroy();
void init();
String intercept(ActionInvocation invocation) throws Exception;
}

  方法的基本说明如下:

  • init方法就类似于构造方法,用于初始化一些相关资源
  • destory方法类似于析构方法,用于释放资源
  • intercept方法,就是拦截器执行的处理方法,我们要实现的功能主要就写在这个方法里面。

  对于intercept方法,再说明几点:

  (1)在intercept方法中写“invocation.invoke();”,这句话的意思是继续运行拦截器后续的处理,如果这个拦截器后面还有拦截器,那么会继续运行,一直到运行Action,然后执行Result。如果intercept方法中没有写“invocation.invoke();”这句话,那就意味着对请求的运行处理到此为止,不再继续向后运行了,换句话说,后续的拦截器和Action就不再执行了。而是在这里返回Result字符串,直接去进行Result处理了。

  (2)在“invocation.invoke();”这句话之前写的功能,会在Action运行之前执行

  (3)在“invocation.invoke();”这句话之后写的功能,会在Result运行之后执行

  (4)intercept方法的返回值就是最终要返回的Result字符串,这个只是在前面没有执行Result的时候才有效,也就是前面没有“invocation.invoke();”这句话的时候,这个返回值就相当于是最终要返回的Result字符串,然后才执行相应的Result处理。

  3)示例

  • 先来个最简单的,就是在Action运行之前,和Result运行之后输出一点信息,当然,有实际功能需求的时候,就写成实际功能的处理代码了,示例代码如下:
package cn.javass.hello.struts2impl.action;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor; public class MyInterceptor implements Interceptor{
public void destroy() {
System.out.println("MyInterceptor 销毁");
}
public void init() {
System.out.println("MyInterceptor 初始化");
} public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("在acton执行之前");
String result = invocation.invoke();
System.out.println("在Result运行之后"); return result;
}
}

  可以看到,这个Interceptor的init方法和destroy方法只是输出了一句信息,它的intercept方法用来执行响应,在“invocation.invoke();”这句话之前和之后分别输出了一句信息。最后返回的result,就是invocation.invoke()的返回值。

  • HelloWorldAction这个类不用修改
  • 需要到struts.xml里面配置拦截器的声明和引用,示例如下:
<package name="helloworld"  extends="struts-default">
<interceptors>
<interceptor name="testInteceptor" class="cn.javass.hello.struts2impl.action.MyInterceptor"/>
<interceptor-stack name="myStack">
<interceptor-ref name="timer"/>
<interceptor-ref name="testInteceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"/> <global-results>
<result name="math-exception">/${folder}/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="math-exception" exception="java.lang.ArithmeticException"/>
<exception-mapping result="math-exception" exception="java.lang.Exception"/>
</global-exception-mappings> <action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction">
<result name="toWelcome">/${folder}/welcome.jsp</result>
<result name="input">/${folder}/login.jsp</result>
</action>
</package>
  • 运行测试一下,后台输出:
在acton执行之前
用户输入的参数为===account=11,password=11111111111,submitFlag=login
在Result运行之后
2014-5-18 21:18:46 com.opensymphony.xwork2.interceptor.TimerInterceptor info
信息: Executed action [//helloworldAction!execute] took 152 ms.

  参考资料:http://www.iteye.com/topic/1124526

【struts2】自定义拦截器的更多相关文章

  1. Struts2自定义拦截器Interceptor以及拦截器登录实例

    1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...

  2. struts2自定义拦截器 设置session并跳转

    实例功能:当用户登陆后,session超时后则返回到登陆页面重新登陆. 为了更好的实现此功能我们先将session失效时间设置的小点,这里我们设置成1分钟 修改web.xml view plainco ...

  3. 12.Struts2自定义拦截器

    12.自定义拦截器        拦截器是Struts2的一个重要特性.因为Struts2的大多数核心功能都是通过拦截器实现的. 拦截器之所以称之为“拦截器”,是因为它可以拦截Action方法的执行, ...

  4. 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】

    一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...

  5. Struts2 自定义拦截器

    自定义拦截器(权限管理),包含了对ajax和表单请求的拦截 package com.interceptor; import java.io.IOException; import java.io.Pr ...

  6. Struts2自定义拦截器

    1. 需求 自定义拦截器实现,用户登录的访问控制. 2. 定义拦截器类 public class LoginInterceptor extends AbstractInterceptor { @Ove ...

  7. struts2自定义拦截器与cookie整合实现用户免重复登入

    目的:测试开发时,为了减少用户登入这个繁琐的登入验证,就用struts2做了个简单的struts2拦截器,涉及到了与cookie整合,具体的看代码 结构(两部份)=struts2.xml+自定义拦截器 ...

  8. 5、Struts2自定义拦截器

    一.拦截器相关知识 1.Struts2框架剖析 Holly版本生活案例: 影视公司(拍电影)    ActionMapper 传媒公司(包装明星) ActionMapping 明星           ...

  9. Struts2自定义拦截器处理全局异常

    今天在整理之前的项目的时候想着有的action层没有做异常处理,于是想着自定义拦截器处理一下未拦截的异常. 代码: package cn.xm.exam.action.safeHat; import ...

  10. Struts2自定义拦截器——完整实例代码

    比如一个网上论坛过滤系统,将网友发表的不文明.不和谐的语言,通过拦截器对这些文字进行自动替代. 该项目包含: 1.自定义拦截器(MyInterceptor.java) 2.发表评论的页面(news.j ...

随机推荐

  1. Return array from functions in C++

    C++ does not allow to return an entire array as an argument to a function. However, you can return a ...

  2. Sql Server重复数据删除

    --在sql2005下可以 ,sql2000不可以 create  table tb(id int,name varchar(4))insert tb select 1,'aa'union all s ...

  3. AngularJS中移动页面滚动穿透解决方案

    ()] + s[]) >= , preventDefault: false, click: IscrollAndroidBug.click() }); var _ele = document.g ...

  4. 【转】java并发编程系列之ReadWriteLock读写锁的使用

    前面我们讲解了Lock的使用,下面我们来讲解一下ReadWriteLock锁的使用,顾明思义,读写锁在读的时候,上读锁,在写的时候,上写锁,这样就很巧妙的解决synchronized的一个性能问题:读 ...

  5. Unity3d for beginners

    tutorial addr: https://www.youtube.com/watch?v=QUCEcAp3h28 1.打开Unity3d  File->newProject ->cre ...

  6. mssql 统计

    这篇文章主要为大家按日,星期,月,季度,年统计销售额的sql语句,需要的朋友可以参考下 --按日,统计本月数据 select sum(payable_amount) as 金额,day([paymen ...

  7. js全局属性 全局变量

    1.全局属性 Infinity NaN undefined 2.全局函数 encodeURI encodeURIComponent decodeURIComponent escape unescape ...

  8. SpringCloud之搭建配置中心

    一.搭建config-server 1.引入pom <dependencies> <dependency> <groupId>org.springframework ...

  9. Windows下 VS2015编译ForestDB

    VS2015编译ForestDB ForestDB 是一个快速的 Key-Value 存储引擎,基于层次B +树单词查找树.由 Couchbase 缓存和存储团队开发. 1.下载forestdb源码 ...

  10. SpringBoot bootstrap 配置文件没有生效

    今天单独使用SpringBoot,发现其中的bootstrap.properties文件无法生效,改成yaml格式也无济于事. 最后调查发现原来是因为SpringBoot本身并不支持,需要和Sprin ...