最近一直在研究struts2,看了李刚写的一本struts2权威指南,但感觉讲的还是有点浅,但是做为入门的话,还是不错的.现在开始看struts2的源码,但由于本人能力有限,看的是头晕脑涨的,有很多不明白的地方,所以想把不明白的地方贴出来跟大家一起讨论讨论.
其中有一处也觉的是比较关键的一步:
以下是DefaultActionInvocation中的invoke()方法的源码:
public String invoke() throws Exception {
String profileKey = "invoke: ";
try {
UtilTimerStack.push(profileKey);
if (executed) {
throw new IllegalStateException("Action has already executed");
}
if (interceptors.hasNext()) {
final InterceptorMapping interceptor = (InterceptorMapping) interceptors.next();
UtilTimerStack.profile("interceptor: "+interceptor.getName(),
new UtilTimerStack.ProfilingBlock<String>() {
public String doProfiling() throws Exception {
resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.this);
return null;
}
});
} else {
resultCode = invokeActionOnly();
}
// this is needed because the result will be executed, then control will return to the Interceptor, which will
// return above and flow through again
if (!executed) {
if (preResultListeners != null) {
for (Iterator iterator = preResultListeners.iterator();
iterator.hasNext();) {
PreResultListener listener = (PreResultListener) iterator.next();
String _profileKey="preResultListener: ";
try {
UtilTimerStack.push(_profileKey);
listener.beforeResult(this, resultCode);
}
finally {
UtilTimerStack.pop(_profileKey);
}
}
}
// now execute the result, if we're supposed to
if (proxy.getExecuteResult()) {
executeResult();
}
executed = true;
}
return resultCode;
}
finally {
UtilTimerStack.pop(profileKey);
}
}
不明白是怎样迭代执行一个又一个的Interceptor中的intercept方法.
按照我的理解,至少我可以看到一个循环遍厉interceptors这个集合才对.
大家可以讨论讨论,有知道的也可以告诉我.谢谢.
分享到:
相关推荐
本篇文章将深入探讨Struts2的运行原理,通过源码分析来揭示其内部工作机制。 首先,我们从核心组件开始。Struts2的核心组件包括Action、FilterDispatcher、Interceptor和Result。Action是业务逻辑的载体,它接收...
了解这些基本概念后,深入源码分析可以发现以下关键技术点: 1. **Dispatcher Servlet**:Struts2的核心控制器,负责接收HTTP请求,通过ActionMapper找到对应的Action,然后调用ActionInvocation进行拦截器链的执行...
源码分析是深入理解一个框架工作原理的关键步骤,对于提升开发技能和解决问题有着不可估量的价值。下面将详细讨论Struts2.1.8版本中的核心概念和关键组件。 1. **Action类与拦截器(Interceptor)**: Struts2的核心是...
本资料包包含的是《Struts2深入详解》一书的源码分析,涵盖了从第一章到第五章的内容,并附带了相关的jar包,方便读者结合理论与实践进行学习。 首先,让我们从第一章开始,Struts2的基础知识。这一章通常会介绍...
3. **源码分析**:研究这两个jar的源码,可以深入理解Struts2的工作原理,包括: - **ActionInvocation**:它是Action执行过程的封装,负责调用Interceptor链并执行Action方法。 - **...
Struts2源码分析可以从以下几个关键点展开: 1. **Action与Dispatcher**:在Struts2中,Action类是业务逻辑处理的主要载体。用户请求首先会被Struts2的前端控制器(DispatcherServlet)捕获,然后根据配置文件...
在“浪曦struts2源码第二课”中,我们将会深入探讨Struts2的核心概念、工作原理以及源码分析。 首先,让我们了解Struts2的基本架构。Struts2的核心组件包括Action、Result、Interceptor(拦截器)等。Action是业务...
如果这节课涉及到更深入的源码分析,可能会讲解Struts2的请求处理流程、拦截器的实现原理、Action的生命周期,甚至包括如何调试和优化Struts2应用。对于Java Web开发者来说,掌握这些知识点对提升开发效率和解决实际...
本资源“Struts 2权威指南源码”包含了该框架的详细学习材料,总共21章,覆盖了从基础到高级的全方位内容。以下是对这些章节可能涵盖的知识点的详细解析: 1. **Struts 2概述**:介绍Struts 2的核心概念,发展历程...
关于源码方面,Struts2的源码分析有助于我们理解其内部工作原理。例如,它如何处理请求、如何执行拦截器链、以及如何进行结果映射。深入源码可以帮助开发者解决遇到的问题,或者定制自己的扩展功能。 工具方面,...
Struts2是一个强大的MVC(模型-视图-控制...通过实际操作,结合源码分析,可以加深对Struts2工作原理的理解,进一步提高开发效率。在实践中,还应注意安全问题,如密码加密存储、防止SQL注入等,以确保用户数据的安全。
源码分析是理解其工作原理、进行自定义扩展或排查问题的关键。以下是关于Struts 2.0.14源码的一些核心知识点: 1. **MVC模式**:Struts 2遵循MVC架构,将应用程序分为模型、视图和控制器三个部分,有效地解耦了业务...
最后,结合源码分析,读者将有机会看到Struts2框架内部的工作流程,例如请求的流转过程、Action的调度以及拦截器的调用顺序。这有助于开发者更深入地理解框架,从而能够更好地优化和调试自己的应用。 总之,"Struts...
书中不仅涵盖了Struts2的基础知识,还详细讨论了如何将Struts2与其他流行技术如Spring和Hibernate进行整合,这对于理解Struts2在实际项目中的应用有着极大的帮助。 1. **核心概念:**Struts2的核心包括Action、...
在分析Struts-menu的源码时,我们可以深入理解Struts框架的工作原理、MVC模式的应用以及如何实现自定义标签库。下面将详细讨论相关知识点。 1. **Apache Struts框架**: Apache Struts是一个开源的Java EE Web应用...
下面将详细讨论Struts2框架以及它在构建在线考试系统中的应用。 1. **Struts2框架**:Struts2是Apache软件基金会的一个开源项目,它是Struts1的升级版,具有更好的灵活性和扩展性。Struts2的核心是Action类,它处理...
我们将围绕其开发技术、功能模块以及源代码分析等方面展开讨论。 一、技术栈介绍 JSP(JavaServer Pages)是一种基于Java的动态网页技术,它允许开发者在HTML页面中嵌入Java代码,实现了视图与逻辑的分离。而...
这个组合通常被称为SSH(Struts2、Spring、Hibernate)或者SSM(Spring、SpringMVC、MyBatis),但在这里我们讨论的是SSH版本。这个框架集合提供了强大的后端数据管理、服务层抽象以及用户界面控制。 【描述】虽然...
Struts2和Ajax是两种在Web开发中广泛使用的技术,它们结合使用可以为用户带来更加流畅和实时的交互体验。在此项目中,"Struts2+ajax注册验证源码"是一个利用这两种技术实现的简单注册验证系统。接下来,我们将详细...