`
jiaguwen123
  • 浏览: 415211 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

浅谈Struts 2 interceptor 工作流程

阅读更多

主要通过一个自定义interceptor简单的例子来解释 Struts 2 interceptor 工作流程
例子非常简单 没有什么业务 处理,重在 试验 工作流程!
环境:
     调试环境:MyEclipse8.5刚下的 非常双爽
  web容器:tomcat6
一.自定义interceptor 代码:

这里定义两个interceptor 来进行试验:
//打个包包!
package com.struts.interceptor;

//引入必要的类
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
//继承interceptor接口
public class InterOne implements Interceptor {
//复写destory()方法就一句话主要看看什么时候调用!
@Override
public void destroy() {
System.out.println("this is interceptor one destory ");

}
//复写init()方法就一句话主要看看什么时候调用!
@Override
public void init() {
// TODO Auto-generated method stub
System.out.println("this is interceptor one init ");

}
//复写interceptor方法,主要的业务处理模块,试验目的触发interceptor时方法中代码执行顺序!
@Override
public String intercept(ActionInvocation ait) throws Exception {

System.out.println("this is interceptor one  befor invoke");
ait.invoke();//调用下一个interceptor
System.out.println("this is interceptor one after invoke");

return null;
}

}
第二个interceptor与上一个基本相同
package com.struts.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class InterTwo implements Interceptor {

@Override
public void destroy() {
System.out.println("this is interceptor two destory ");

}

@Override
public void init() {
// TODO Auto-generated method stub
System.out.println("this is interceptor two init ");

}

@Override
public String intercept(ActionInvocation ait) throws Exception {

System.out.println("this is interceptor two  befor invoke");
ait.invoke();
System.out.println("this is interceptor two after invoke");

return null;
}

}

二.做个jsp页面:
<body>
  <% System.out.println("this is jsp!"); %>  <!--  在命令行输出点信息,一边看到触发流程-->

    this is interceptortest.jsp <br>
  </body>

三.配置web.xml这个东东,在myeclipse中会默认生成!只要选择相应的版本!
  <filter>
  <filter-name>struts2</filter-name>
  <filter-class>
  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  </filter-class>
  </filter>
  <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>

四.配置struts.xml
<struts>
<!--定义为调试模式-->
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<!--把interceptor定义在package中,会把package中的方法都加上形同的interceptor-->
<interceptors>
<interceptor name="interceptorone" class="com.struts.interceptor.InterOne"/>
<interceptor name="interceptortow" class="com.struts.interceptor.InterTwo"/>
<interceptor-stack name="mystack">
  <interceptor-ref name="interceptorone"/>
<interceptor-ref name="interceptortow"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>

</interceptors>
<default-interceptor-ref name="mystack"/>
<action name="interceptor">
<result>/interceptortest.jsp</result>
</action>

</package>
</struts>

五.部署,调试,查看输出:
1.启动容器:
  信息: Overriding property struts.i18n.reload - old value: false new value: true
2010-4-1 1:04:05 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
信息: Overriding property struts.configuration.xml.reload - old value: false new value: true
看见在启动容器时 interceptor方法中的init方法就已经进行初始化了!
this is interceptor one init
this is interceptor two init
2010-4-1 1:04:07 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2010-4-1 1:04:07 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2010-4-1 1:04:07 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/63  config=null
2010-4-1 1:04:07 org.apache.catalina.startup.Catalina start
信息: Server startup in 9733 ms

2.
地址栏输入http://localhost:8080/strutsinterceptor/interceptor.action
查看命令行输出:
看见,在触发interceptor时 会先触发 第一个interceptor相应方法中的invoke()之前的代码之后是第二个,在返回jsp页面后会反向执行 invoke()方法之后的代码!
this is interceptor one  befor invoke
this is interceptor two  befor invoke
this is jsp!
this is interceptor two after invoke
this is interceptor one after invoke

3.结束容器:
命令行输出了定义在 interceptor中destory()方法中的代码!注意输出顺序也是以stack方式运行的
信息: Stopping service Catalina
this is interceptor two destory
this is interceptor one destory
2010-4-1 1:10:19 org.apache.coyote.http11.Http11Protocol destroy
信息: Stopping Coyote HTTP/1.1 on http-8080

好了基本就是这些已经可以说明问题了!

分享到:
评论

相关推荐

    struts2 Interceptor详解

    Struts2 Interceptor详解 Struts2作为一款流行的Java Web框架,其强大的功能之一就是拦截器(Interceptor)。拦截器在MVC模式中扮演着重要角色,它可以对请求进行预处理和后处理,提供了灵活的扩展机制,使得业务...

    struts2 interceptor介绍

    通过深入了解Interceptor的工作原理及其与框架其他组件的交互方式,开发者能够更加高效地利用Struts2构建复杂的应用程序,同时避免常见的陷阱和误区。无论是新手还是经验丰富的开发者,掌握Interceptor的正确使用...

    Struts2拦截器(Interceptor)

    Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)

    struts2 Interceptor拦截器

    在Struts2框架中,**Interceptor(拦截器)**是一个关键组件,它允许开发者在特定的动作(Action)执行前后添加自定义的处理逻辑,极大地增强了应用程序的灵活性。 #### 二、Interceptor 概念与作用 Interceptor ...

    Struts2_interceptor_和_filter区别

    标题和描述均聚焦于“Struts2_interceptor_和_filter区别”,这暗示着对比和解析Struts2框架中拦截器(Interceptor)与过滤器(Filter)的差异是本文的核心议题。接下来,我们将深入探讨这两者在功能、实现方式以及...

    Struts2 拦截器 Interceptor

    ### Struts2 拦截器 Interceptor #### 一、概述 在Struts2框架中,拦截器(Interceptor)是一种非常重要的机制,它能够帮助开发者实现诸如权限控制、事务管理、日志记录等跨切关注点的功能。通过定义不同的拦截器...

    STRUTS2:拦截器Interceptor

    STRUTS2:拦截器Interceptor

    saif(struts1 interceptor)

    6. **性能优化**:虽然Struts1本身不支持拦截器,但通过"saif(struts1 interceptor)"插件,开发者可以实现缓存管理、性能统计等优化措施,提升应用程序的性能。 7. **与Struts2的对比**:虽然Struts1的拦截器机制受...

    浅谈Struts2拦截器的原理与实现.docx

    Struts2 拦截器是Struts2框架的核心组件之一,它允许开发者在Action执行前后插入自定义的处理逻辑,实现对请求的预处理和后处理,从而增强应用程序的功能和控制流程。以下是对Struts2拦截器原理与实现的详细解析: ...

    深入浅出Struts2.pdf

    总之,“深入浅出Struts2”这份资料全面讲解了Struts2的各个关键组成部分,包括其工作原理、配置方式、拦截器机制、OGNL表达式、插件使用以及与Spring的整合,是学习和掌握Struts2框架的宝贵资源。通过深入学习和...

    struts2 interceptor annotation plugin

    Struts2是一个强大的Java web应用程序框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了构建可维护性、可扩展性良好的Web应用的工具。在Struts2中,拦截器(Interceptor)是核心组件之一,它们在...

    深入浅出Struts2 包含了源码

    - **核心机制**:深入探讨Struts2的Action、Result、Interceptor、OGNL等核心组件的工作原理。 - **配置篇**:解析XML配置文件和注解配置的使用,以及如何自定义配置元素。 - **实战篇**:通过实际项目案例,演示...

    深入浅出Struts2源代码

    这本书"深入浅出Struts2源代码"是针对该框架源码的深度解析,旨在帮助读者理解Struts2的工作原理,提升开发技能。 Struts2的核心组件包括: 1. **FilterDispatcher**:这是Struts2的入口点,它是一个Servlet ...

    Struts2工作流程

    在深入理解Struts2的工作流程之前,我们需要先了解一些基本概念。 1. **MVC模式**: MVC模式将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型负责业务逻辑,视图负责显示...

    <<深入浅出Struts 2>>中文版 下载

    《深入浅出Struts 2》是一本专为Java开发者设计的书籍,旨在全面解析Struts 2框架的原理、特性和实际应用。Struts 2是Java Web开发中的一个热门框架,它提供了强大的MVC(Model-View-Controller)架构支持,极大地...

    struts2工作流程

    在深入探讨Struts2的工作流程之前,我们先了解一下MVC模式的基本概念。MVC模式将应用逻辑分隔为三个部分:模型(Model)处理业务逻辑,视图(View)负责展示数据,控制器(Controller)协调用户输入和模型间的交互。...

    struts2小程序 struts2代码

    Struts2是一个强大的Java web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用。这个“struts2小程序”很可能是开发者利用Struts2框架开发的一个小型项目,可能包含了基本的CRUD操作或其他特定功能。...

    晾晾多年珍藏 深入浅出Struts 2.pdf

    Struts 2的核心概念包括Action、Result、Interceptor(拦截器)等,这些组件协同工作,实现了业务逻辑与表现层的分离,使得代码更易于维护和扩展。Action是处理用户请求的中心对象,它可以接收请求参数,调用业务...

    深入浅出Struts 2.pdf(原书扫描版)

    1. **快速入门**:介绍如何搭建Struts 2的开发环境,创建第一个简单的Hello World应用程序,让读者对Struts 2有个直观的认识。 2. **配置详解**:讲解Struts 2的配置文件(struts.xml)以及各种配置元素的作用,...

    struts2 拦截器写法

    Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.

Global site tag (gtag.js) - Google Analytics