自定义拦截器,首先新建一个继承自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. Groovy Spock环境的安装

    听说spock是一个加强版的Junit,今天特地安装了,再把过程给大家分享一下. 首先说明,我的Java项目是用maven管理的. 我用的Eclipse是Kelper,开普勒. 要使用Spock之前, ...

  2. 网站性能评分工具Yslow 使用教程

    Yslow 这个工具相信无论是搞前端的攻城师或者是搞网站的站长都了解,Yslow 可比谷歌的PageSpeed 有名多了:那个百分制下的评分数据总让国人着迷,看来应试教育造的孽太深了.Jeff 认为的 ...

  3. linux测速软件speedtest-cli

    linux测速软件: https://github.com/sivel/speedtest-cli 以下是我在gentoo上测的

  4. Android 中调试手段 打印函数调用栈信息

    下面来简单介绍下 android 中的一种调试方法. 在 android 的 app 开发与调试中,经常需要用到打 Log 的方式来查看函数调用点. 这里介绍一种方法来打印当前栈中的函数调用关系 St ...

  5. 为什么我的SQL server 在附加数据库后,数据库总是变成了只读?

    我从同学那拷贝来一个数据库,在他那都可以用,可是当我附加到自己SQL Server上时,数据库显示为只读,我查看过数据库源文件所在的文件夹都正常!请高手指教!谢谢 ================== ...

  6. 2015国产犯罪传记《暴力天使》HD720P.泰语中字

    导演: 吴强编剧: 阮明玉主演: 张玉英 / 金理 / 至宝类型: 传记语言:泰语制片国家/地区: 中国大陆上映日期: 2016年3月25日片长: 92分钟又名: Huong Ga暴力天使的剧情简介 ...

  7. 2015年新版C#从入门到精通(第2版)视频教学录像【无水印版】

    <c#从入门到精通(第2版)>以零基础讲解为宗旨,用实例引导读者学习,深入浅出地介绍了c#的相关知识和实战技能.<c#从入门到精通(第2版)>第1篇[c#语言基础]主要讲解c# ...

  8. ios 定位 航向检测

    // ViewController.m // CoreLocation框架的基本使用—定位 // 注意 点: 1.设置地位可用 2. 设置允许本程序定位(对弹出的框,允许即可) 3. 为模拟器 设置位 ...

  9. 第一个WP8程序,照相机

    安装win8 64位,vs2013(包含wp8 sdk),百度各种得到学生开发者账户之后,终于可以试一下将自己的app部署到手机上的感觉了. 首先来个简单练练手的照相机功能 照相 即从主界面进入到照相 ...

  10. 20135316王剑桥 linux第十一周课实验笔记

    getenv函数 1.获得环境变量值的函数 2.参数是环境变量名name,例如"HOME"或者"PATH".如果环境变量存在,那么getenv函数会返回环境变量 ...