自定义拦截器,首先新建一个继承自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. ubuntu中启用ssh服务

    ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序ubuntu是默认安装的.而如 ...

  2. 【转】【C#】异常类 Exception 枚举所有类型的异常

    一.基础 在C# 里,异常处理就是C# 为处理错误情况提供的一种机制.它为每种错误情况提供了定制的处理方式,并且把标识错误的代码与处理错误的代码分离开来. 对.NET类来说,一般的 异常类System ...

  3. word 2010自定义快捷键提高工作效率

    经常使用word处理文档, 做笔记的时候会把word文档框缩小,以便同时看pdf同时记录笔记,但是缩小的word框不能把所有的菜单项显示出来,我比较常用那个插入边框下面的那个横线来做分割符,但是缩小了 ...

  4. Arduino小车学习与研究

    信安系统设计基础实践模块 Arduino小车学习与研究 ================== 陈都(20135328) 余佳源(20135321) 莫凡(20135225) ---------- 索引 ...

  5. linux实践——简单程序破解

    一.运行login可执行程序,屏幕显示需要输入密码,随便输入一串字符,结果是Drop dead! 二.objdump -d login,对login进行反汇编,找到main函数,找到含有scanf的那 ...

  6. 利用javascript和WebGL绘制地球 【翻译】

    利用javascript和WebGL绘制地球 [翻译] 原翻译:利用javascript和WebGL绘制地球 [翻译] 在我们所有已知的HTML5API中,WebGL可能是最有意思的一个,利用这个AP ...

  7. JS判断输入是否为整数和数字的正则表达式

    "^\\d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-\\d+)|(0+))$" ...

  8. 一款WP小游戏代码分享

    首先声明游戏是H5的代码,当然游戏部分不是我写的,感谢@LeZhi的分享,关于H5我还在学习,这里只是简单介绍一下如何把一款现成的H5游戏封装成一款WP游戏(当然也可以做成Windows游戏). 大家 ...

  9. 第二章 Js函数

      函数的定义二种定义 ①function myfunc () { console("hello"); }; ②var myfunc = function () { console ...

  10. Quartz.net的cron表达式

    写在前面 前面有一篇文章用到了quartz.net,在设置定时时间的时候,使用了cron表达式,这里记录几种常见设置方式,方便对照使用. 详情 在这篇文章:Quartz.Net在windows服务中的 ...