自定义拦截器,首先新建一个继承自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. jQuery Event.stopPropagation() 函数详解

    stopPropagation()函数用于阻止当前事件在DOM树上冒泡. 根据DOM事件流机制,在元素上触发的大多数事件都会冒泡传递到该元素的所有祖辈元素上,如果这些祖辈元素上也绑定了相应的事件处理函 ...

  2. IBatis.Net学习笔记十三:在IBatis.Net中调用存储过程

    其实调用方式比较简单,主要也就是两种类型的存储过程:1.更新类型的存储过程2.查询类型的存储过程下面就来看看具体的调用方式:1.更新类型的存储过程sp_InsertAccount: CREATE PR ...

  3. matlab数据转换为字符串并合并字符串标注到图像曲线上

    1.把数字转换为字符串 [函数描述]str=num2str(A):把数组A中元素取小数点后四位,并转换为字符串. [函数实例]把数字转换为字符串,输入语句: str1=num2str(pi) str2 ...

  4. timeSeries db之:使用Metrics监控应用程序的性能 (zz)

    在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前,或者某一时刻运行的情况,比如当前系统中对 ...

  5. Thinkphp 边学边用-验证码无意间犯的错

    先看代码: $(".verify_img").click(function(){ var timenow = new Date().getTime(); var url =&quo ...

  6. node的实践(项目三)

    渲染前台的方式. <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" ...

  7. 接受客户端传的inputstream类型转成string类型

    public string GetReqContent() { var request = HttpContext.Current.Request; var contentStream = reque ...

  8. [设计模式] javascript 之 代理模式

    代理模式说明 说明:顾名思义就是用一个类来代替另一个类来执行方法功能,这个模式跟装饰模式有点相似,不一样的是,代理模式是代替客户初始化被代理对象类,而装饰模式采用接口或初装饰者参数引用的方式来执行的. ...

  9. c# 关于浅拷贝和深拷贝

    class Program { static void Main(string[] args) { //浅拷贝 Person p1 = new Person(); p1.Name = "张三 ...

  10. linux 查看服务器性能常用命令

    一.top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器   下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来 ...