`
jdluojing
  • 浏览: 18020 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

Struts2学习笔记(九) 拦截器(Interceptor)(下)

 
阅读更多

拦截器的查找顺序

如果我们在多个地方配置了拦截器,那么框架会按什么样的顺序进行查找呢:

(1)首先查找当前Action是否声明了拦截器,如果有则使用这个拦截器,不再继续寻找,如果没有,则执行下一步

(2)其次,查找当前Action所在的包中是否声明了默认的拦截器引用,即看<package>元素下有没有<default-intercptor-ref>元素,如果有就使用它,不再继续寻找。如果没有,则执行下一步

(3)最后,递归寻找Action所在包的父包中是否设置了默认拦截器引用,直到找到为止。

注:这里的三步是覆盖的关系,即执行了(2),那么(2)(3)就不会执行了。自顶向下的优先级。一般情况下,如果我们没有在strtus.xml中对Action进行拦截器引用配置,但是我们的包继承了strtus-default包,那么就会使用定义在strtus-default包中的defaultStack拦截器栈。至于没有拦截器的情况,应该是不存在的,如果不使用拦截器,那么就失去了使用Strtus的意义了。

自定义拦截器

虽然实际使用中struts2提供的拦截器已经基本够我们使用了,一般不需要我们自己写拦截器。但是为了更加深刻的理解拦截器的实现机制。我们还是自己动手写一个自定义的拦截器。要想自定义拦截器,我们只需要实现com.opensymphony.xwork2.interceptor.Interceptor接口即可。这个接口中定义了三个方法,init方法会在对象初始化时被调用,可以用来获取一些资源;destory方法类似与c++中的析构函数(这样便于理解,实际还是有差别的);真正实拦截器功能的是interceptor方法,我们自定拦截器主要就是实现这个方法。下面我们以判断用户是否登录为例来写一个自定义拦截器:

public class MyInterceptor implements Interceptor {

	public void destroy() {
	}

	public void init() {
	}

	public String intercept(ActionInvocation invocation) throws Exception {

		System.out.println("动作执行之前...");
		String result = invocation.invoke();
		System.out.println("结果执行之后...");
		
		return result;
	}

}

Struts.xml

<package name="default" namespace="/" extends="struts-default">

<interceptors>

<interceptor name="myinterceptor"class="interceptor.MyInterceptor" />

<interceptor-stack name="myStack">

<interceptor-ref name="defaultStack"></interceptor-ref>

<interceptor-ref name="myinterceptor"></interceptor-ref>

</interceptor-stack>

</interceptors>

<default-interceptor-ref name="myStack"></default-interceptor-ref>

<action name="hello" class="action.HelloWorld">

<result name="success">/hello.jsp</result>

</action>

</package>

Hello.jsp

<body>

<%

System.out.println("结果已执行...");

%>

This is hello.jsp. <br>

</body>

在浏览器中访问hello动作,hello.jsp页面呈现之后,查看控制台输出如下:

动作执行之前...

结果已执行...

结果执行之后...

由此可见,我们自定义的interceptor已经在动作执行之前和结果执行之后都被执行了。当然,如果你想在结果被执行之前做点什么,那就需要使用前面学到的PreResultListenner来实现了。

总结:关于拦截器的学习,差不多就到这里了。拦截器的配置和使用本身不难,主要是理解拦截器的实现原理。到现在差不多就把Struts2中的几个基本的概念学完了,接下来就该学习OGNL和类型转换以及输入验证了。以前自学都只是看看书或者教程,没怎么做过笔记,现在发现其实在写笔记的过程中,会加深对所学只是的理解,有些你看书或教程没理解到的地方,在你边写笔记边做实例的过程中就理解的很清楚了。看来以后学习的时候尽量写一些笔记来加深自己的理解,记不清的时候还可以拿出来看看。


分享到:
评论

相关推荐

    struts2学习笔记十(第10讲.Struts2的核心 拦截器)

    在Struts2中,拦截器是一个实现了`Interceptor`接口的类,它通过在动作执行前后插入额外的处理逻辑,实现了对请求处理的增强。拦截器链是由多个拦截器按照特定顺序组成的,每个拦截器都可以执行预处理和后处理任务。...

    张龙圣思园struts2学习笔记word

    Struts2是MVC(Model-View-Controller)设计模式的一种实现,它通过拦截器(Interceptor)机制实现了灵活的业务逻辑处理。控制器负责接收用户请求,解析并转发到相应的业务逻辑,模型层处理业务,视图则负责展示结果...

    struts2 学习重点笔记

    - **原理**:Struts2 的拦截器会在 Action 执行完成后,调用 getter 方法并将结果存储到适当的范围对象中。 **3.4 请求转发与重定向** - **转发**:Action 的 execute 方法返回一个字符串,根据这个字符串找到对应...

    struts2学习笔记十一(第11讲.Struts2的核心 拦截器续)

    在本篇“Struts2学习笔记十一”中,我们将深入探讨Struts2的核心拦截器及其应用。 **1. 拦截器的概念** 拦截器是AOP(面向切面编程)的一部分,在Struts2中,它们作为一系列可插入的处理链,可以在Action执行前后...

    struts2学习笔记(完美总结)——转自OPEN经验库

    在实际项目中,Struts2可以处理类型转换、文件上传下载、拦截器(Interceptor)防止重复提交等问题。Interceptor是Struts2中的重要特性,它允许在Action执行前后插入额外的处理逻辑,如登录验证、日志记录等。深入...

    struts2学习笔记

    这个"struts2学习笔记"涵盖了Struts2的核心概念、配置、动作、拦截器、结果类型等关键知识点,旨在帮助初学者深入理解并掌握Struts2框架。 1. **Struts2核心概念** - **Action**:是Struts2的核心,负责处理用户的...

    Struts2学习笔记

    本学习笔记将深入探讨Struts2的核心概念、架构以及实际应用。 一、Struts2框架概述 1. 架构:Struts2基于Model-View-Controller(MVC)设计模式,将业务逻辑、数据处理和用户界面分离,提高了代码的可读性和可维护...

    struts2拦截器笔记

    `struts2_2` 可能指的是 Struts2 的某个特定版本,而 `struts2拦截器笔记.txt` 文件可能包含了关于该版本中拦截器的详细使用和实现方法。通常,笔记会涵盖如何创建自定义拦截器、如何配置拦截器链、以及各种内置拦截...

    struts2学习笔记二

    在本篇学习笔记中,我们将重点讨论Struts2框架中的Action和拦截器(Interceptor)如何处理请求参数。 首先,Struts2的核心是拦截器机制,它允许我们在Action执行前后插入自定义的处理逻辑。在`struts-default.xml`...

    struts2学习笔记和源码

    Struts2是Apache软件基金会下的一个项目,它是Struts1的升级版,弥补了Struts1的一些不足,如动作映射和拦截器等。Struts2的核心是Action,它是业务逻辑的载体,与视图和模型进行交互。框架通过配置文件或注解来定义...

    struts2学习笔记.rar

    在请求到达时,Struts2的拦截器(Interceptor)链会处理请求,执行预定义的任务,如验证、日志记录等,然后将请求转发给相应的Action。 Struts2的配置文件通常是struts.xml,用于定义Action、结果类型、拦截器等。...

    struts 2 学习笔记

    以上内容仅是Struts2学习笔记中的核心部分,实际学习时还需要深入理解拦截器、结果类型配置、插件机制、异常处理等更多高级特性。Struts2提供了强大的功能和灵活性,是Java Web开发中不可或缺的一部分。

    struts学习笔记(2)

    ### Struts2 拦截器 (Interceptor) 学习笔记 #### 一、拦截器的概念及作用 在Struts2框架中,拦截器扮演着非常重要的角色,它与Java Web开发中的过滤器(Filter)有相似之处但又有显著区别。拦截器的主要作用在于...

Global site tag (gtag.js) - Google Analytics