自定义拦截器,首先新建一个继承自AbstractInterceptor类的类,然后重写intercept方法,代码如下

public class HelloInterceptor extends AbstractInterceptor {

    @Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
System.out.println("拦截器测试");
// 放行到下一个
return invocation.invoke();
} }

一、自定义拦截器,只作用于当前Action类

新建structs-interceptor.xml文件,然后进行相关配置,使用时要记得包含到structs.xml文件中;自定义的拦截器注册在包内(即package节点下),配置在action节点下,代码如下(记得配置structs提供的默认拦截器)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package
name="interceptor"
namespace="/interceptor"
extends="struts-default">
<!-- 注册拦截器 -->
<interceptors>
<!-- name:拦截器名称;class:拦截器完整类名 -->
<interceptor
name="hello"
class="cn.hjp.interceptor.HelloInterceptor"></interceptor>
</interceptors>
<action
name="HelloAction"
class="cn.hjp.interceptor.HelloAction">
<result
name="success"
type="dispatcher">/index.jsp</result>
<!-- 拦截器拦截 ,自定义拦截器一般放在最前面 -->
<interceptor-ref name="hello"></interceptor-ref>
<!-- 如果自己配置了拦截器,不配置下面的拦截器,则struts默认的18个拦截器不在执行 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
</struts>

二、自定义拦截器,作用于该包下所有Action类

自定义拦截器,注册和配置都在package节点下,自定义的拦截器配置在拦截器栈中,最后还要重新配置structs的默认拦截器,这样,访问该包的action时就会走新配置的默认拦截器,代码如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package
name="interceptor"
namespace="/interceptor"
extends="struts-default">
<interceptors>
<!-- name:拦截器名称;class:拦截器完整类名 -->
<interceptor
name="hello"
class="cn.hjp.interceptor.HelloInterceptor"></interceptor>
<!-- 拦截器栈 -->
<interceptor-stack name="myDefaultStack">
<!-- 拦截器拦截 ,自定义拦截器一般放在最前面 -->
<interceptor-ref name="hello"></interceptor-ref>
<!-- 如果自己配置了拦截器,不配置下面的拦截器,则struts默认的18个拦截器不在执行 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 将自己的拦截器栈myDefaultStack设为该包下默认拦截器栈,如此,该包下的action都会执行默认拦截器栈中的拦截器 -->
<default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
<action name="HelloAction" class="cn.hjp.interceptor.HelloAction">
<result name="success" type="dispatcher">/index.jsp</result>
</action>
</package>
</struts>

三、自定义拦截器,实现允许在其他包下也可以有效

如果想让其他包下的action使用别的包下的拦截器,那么就让新的配置文件继承自其他包

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package
name="interceptor2"
namespace="/interceptor"
extends="interceptor">
<action name="TestInter" class="cn.hjp.test.TestInter">
<result name="success" type="dispatcher">/index.jsp</result>
</action>
</package>
</struts>

注意:由dtd文件决定了structs配置文件书写规则,所以拦截器和action的配置是有顺序的

四、自定义指定方法的拦截器

新建一个继承自MethodFilterInterceptor的类,并实现doIntercept方法,代码如下

public class MyMethodInterceptor extends MethodFilterInterceptor {

    @Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
System.out.println("方法拦截器");
return invocation.invoke();
} }

新建一个进行测试的Action类,代码如下

public class HelloAction2 extends ActionSupport {

    @Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
} public void add(){
System.out.println("方法拦截器---add方法");
} public void find(){
System.out.println("方法拦截器---find方法");
} public void delete(){
System.out.println("方法拦截器---delete方法");
}
}

新建struts-methodInterceptor.xml文件,进行相关配置,最后记得include到struts.xml文件中,配置如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package
name="methodInterceptor"
namespace="/methodInterceptor"
extends="struts-default">
<interceptors>
<interceptor
name="MyMethodInterceptor"
class="cn.hjp.interceptor.MyMethodInterceptor"></interceptor>
<interceptor-stack name="myDefaultStack">
<interceptor-ref name="MyMethodInterceptor">
<!--excludeMethods指定不进行过滤的方法,includeMethods指定过滤的方法 -->
<!-- 如果只有excludeMethods,其他默认进行过滤,如果只有 includeMethods,其他默认不过滤,两个都有,其他默认不过滤-->
<param name="excludeMethods">find</param><!-- 如果多个方法,用英文逗号分隔 -->
<param name="includeMethods">add</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
<action
name="HelloAction2"
class="cn.hjp.interceptor.HelloAction2">
<result
name="success"
type="dispatcher">/index.jsp</result>
</action>
</package>
</struts>

初学Struts2-自定义拦截器及其配置的更多相关文章

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

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

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

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

  3. struts2框架之自定义拦截器和配置

    struts框架中也存在拦截器,只不过系统自动调用.框架自带的拦截器的配置文件所在的位置为: java Resources--->Libraries--->struts2-core-2.3 ...

  4. 12.Struts2自定义拦截器

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

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

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

  6. Struts2自定义拦截器

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

  7. 5、Struts2自定义拦截器

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

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

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

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

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

随机推荐

  1. C语言 结构体中的成员域偏移量

    //C语言中结构体中的成员域偏移量 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> # ...

  2. php基础27:文件写入

    <?php //1.打开一个文件 /* 第一个参数:打开的文件,第二个参数表明模式,w只写 如果打开的文件已经有了,那么删除这个文件,重新创建 如果没有,直接创建 fopen返回的是资源类型re ...

  3. eclipse使用

    Eclipse 是一个开放源代码的.基于 Java 的可扩展开发平台. Eclipse 是 Java 的集成开发环境(IDE),当然 Eclipse 也可以作为其他开发语言的集成开发环境,如C,C++ ...

  4. Caffe学习系列(6):Blob,Layer and Net以及对应配置文件的编写

    深度网络(net)是一个组合模型,它由许多相互连接的层(layers)组合而成.Caffe就是组建深度网络的这样一种工具,它按照一定的策略,一层一层的搭建出自己的模型.它将所有的信息数据定义为blob ...

  5. Matlab txt内容替换函数 fgetl fseek

    Data Import and Export  :Low-Level File I/O the contents of the file:    16     5     9     4     2  ...

  6. Android -- Properties使用

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Properties; public ...

  7. error C2065: “CMainFrame”: 未声明的标识符

    xxxView.cp的开头包含 框架的头文件即可 : #include "MainFrm.h"

  8. Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny

    首先提下ButterKnifey已经更新到版本7.0.1了,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义.同时注册的方式也从 ButterKnife.inject(this ...

  9. 通过爬虫代理IP快速增加博客阅读量——亲测CSDN有效!

    写在前面 题目所说的并不是目的,主要是为了更详细的了解网站的反爬机制,如果真的想要提高博客的阅读量,优质的内容必不可少. 了解网站的反爬机制 一般网站从以下几个方面反爬虫: 1. 通过Headers反 ...

  10. php模式设计之 适配器模式

    在这个有没有对象都要高呼“面向对象”的年代,掌握面向对象会给我们带来意想不到的方便.学编程的小伙伴从开始能写几行代码实现简单功能到后来懂得将一些重复的操作组合起来形成一个“函数”,再到后来将“函数”和 ...