利用工作之余,看了一下xwork2 的源码,借此学学设计模式,
并仿照Struts2 和 xwork2, 写了一个简单的mvc框架。
这东西容易忘,遂把这段时间的成果整理一下,不然过段时间忘光了就可惜了。
写的也比较粗糙,望大家多提意见,一起学习提高。
我的email : shaolz1982@gmail.com
内容:
xwork-2.1.1 源码,
部分struts-2.0.11.2源码 (核心代码为 xwork-2.1.1, 在其上增加了部分外围功能),
Action 调用过程:
FilterDispatcher -> Dispatcher ->
DefaultActionProxy ->DefaultActionInvocation,Interceptor -> Result
web.xml
<filter>
<filter-name>minimvc</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>minimvc</filter-name>
<url-pattern>/*.action</url-pattern>
</filter-mapping>
在web.xml中定义mvc 中转类,
FilterDispatcher:
看下源码:
public class FilterDispatcher implements StrutsStatics, Filter {
可以看到 FilterDispatcher 是一个 Filter, 而不是像struts1.x 一样的 servlet。
当我们提交请求时, 请求会先进入这个filter,执行 doFilter 方法。
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
ServletContext servletContext = getServletContext();
String timerKey = "FilterDispatcher_doFilter: ";
try {
UtilTimerStack.push(timerKey);
request = prepareDispatcherAndWrapRequest(request, response);
ActionMapping mapping;
try {
mapping = actionMapper.getMapping(request, dispatcher.getConfigurationManager());
} catch (Exception ex) {
LOG.error("error getting ActionMapping", ex);
dispatcher.sendError(request, response, servletContext, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex);
return;
}
if (mapping == null) {
// there is no action in this request, should we look for a static resource?
String resourcePath = RequestUtils.getServletPath(request);
if ("".equals(resourcePath) && null != request.getPathInfo()) {
resourcePath = request.getPathInfo();
}
if (serveStatic && resourcePath.startsWith("/struts")) {
String name = resourcePath.substring("/struts".length());
findStaticResource(name, request, response);
} else {
// this is a normal request, let it pass through
chain.doFilter(request, response);
}
// The framework did its job here
return;
}
dispatcher.serviceAction(request, response, servletContext, mapping);
} finally {
try {
ActionContextCleanUp.cleanUp(req);
} finally {
UtilTimerStack.pop(timerKey);
}
}
}
其中
request = prepareDispatcherAndWrapRequest(request, response);
对 request 进行一些处理,如设置字符集。
mapping = actionMapper.getMapping(request, dispatcher.getConfigurationManager());
对request请求进行判断,如果是调用的action,则返回非空的 ActionMapping
public class ActionMapping {
private String name;
private String namespace;
private String method;
private Map params;
private Result result;
ActionMapping 是struts2 定义的一个类,内容是action的一些描述信息,
类似 xwork2 里边的 ActionConfig。
(关于这一步骤以及涉及的类,里边东西也不少,并没有仔细看,以后有机会在补充)
如非空,说明是要调用action, 进入框架的 Action调用流程,
dispatcher.serviceAction(request, response, servletContext, mapping);
分享到:
相关推荐
在深入了解XWork2源代码之前,我们需要先理解它在Web开发中的角色和功能。 XWork2的设计目标是提供一个灵活且可扩展的Action执行模型,它将业务逻辑与视图和控制层分离,遵循MVC(Model-View-Controller)架构模式...
首先,我们来看一下“xwork-2.1.1-src.zip”这个压缩包,它包含了xwork2的完整源代码,这对于开发者来说是一份宝贵的资源。解压后,你可以直接浏览源代码,了解每个类和方法的功能,这对于学习和调试Struts2的应用...
《Xwork2 源码阅读.pdf》是一个深入解析Xwork2框架的文档,结合了Webwork和Struts2的源码分析,旨在帮助开发者理解这两个著名MVC框架的内部工作机制。Xwork2是Struts2的核心部分,负责处理Action的执行流程、拦截器...
《XWork2源代码与Struts2核心解析》 XWork2是Apache Struts2框架的核心组成部分,它为Struts2提供了许多基础功能和服务。在深入理解Struts2之前,了解XWork2的工作原理和机制至关重要。这篇内容将详细解析XWork2的...
【xWork2.1.2源代码下载】的资源提供了深入了解和学习xWork框架的机会。xWork是一个广泛使用的Java框架,主要用于构建企业级应用,...对于想要深入了解xWork并进行二次开发的开发者来说,这份源代码是一份宝贵的资料。
**XWork 源代码详解** XWork 是一个强大的、...总之,这个包含完整XWork源代码的压缩包为你提供了一个宝贵的自学资源。你可以逐步探索源代码,学习如何实现和使用上述的各个功能点,从而提升自己的Java Web开发技能。
JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2.0.4...xwork-2.0.4JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2.0.4JavaEE源代码 xwork-2
《深入解析xwork 2.x源码:从2.1.2到2.2.1的演进》 xwork作为一个强大的Action框架,是Struts2的...通过深入学习xwork源码,开发者可以更好地掌握MVC设计模式,理解Web应用的控制层实现,从而在实践中发挥更大的效能。
xwork2.0.4源代码的获取通常有两种方式,一是通过myeclipse的svn工具,二是直接从xwork的官方网站下载包含源代码的all版本。这两种方法都是为了确保开发者能够深入理解并定制这个强大的框架。 xwork2.0.4的源代码中...
这个压缩包包含了XWork 2.0 RC1版本的源代码,对于想要深入理解Struts2工作原理的开发者来说是一份宝贵的资源。 首先,我们需要知道XWork是如何与Struts2协同工作的。在Struts2中,Action是业务逻辑的载体,而XWork...
这个源代码包包含的是XWork2的完整源码,对于理解其工作原理、进行定制开发或者调试都是非常有价值的资源。 1. **MVC模式**:MVC是一种软件设计模式,它将应用程序分为三个主要部分:模型(Model)处理数据逻辑,...
在深入理解xwork源代码的过程中,我们可以更好地掌握Struts2的工作原理,提升我们的开发技能和解决问题的能力。 xwork-2.1.6版本是xwork的一个稳定版本,包含了大量的改进和优化。这个版本修复了一些已知的bug,...
这个压缩包包含的“Xwork完整源代码”是对于开发者来说非常宝贵的资源,特别是对于那些想要深入理解Struts2框架或者想要自定义或扩展Xwork功能的人来说。 Xwork的设计理念是基于拦截器的模型-视图-控制器(MVC)...
深入理解XWork的源代码对于提升Struts2的开发技能至关重要。 首先,让我们来看看`xwork-2.1.1-sources`这个文件,它是XWork库的源代码,包含了所有相关的类和接口,供开发者研究和学习。通过阅读源代码,我们可以...
《深入剖析xwork-2.1.2-all源代码:为Struts2.X开发与学习助力》 在软件开发领域,尤其是Java Web开发中,Struts2框架因其强大的功能和灵活性,一直以来都是开发者们青睐的选择。而xwork作为Struts2的核心组件,其...
`src`目录包含了源代码,分为`main/java`和`test/java`两部分。`main/java`存放实际的业务逻辑和框架组件,而`test/java`包含了单元测试,确保代码的正确性。在`src/main/java`下,你会看到XWork的核心类,如`...
2010年8月11日的这份源代码,为我们提供了一个深入了解XWork2内部机制的宝贵资源。以下是对XWork2源代码及其核心组件的详细解读。 首先,XWork2的核心概念是Action,它是业务逻辑的载体。在Struts2中,Action类继承...
在06170300180这个文件中,可能包含了Struts2和XWork2的源码,你可以通过阅读这些源码来进一步了解这两个框架的实现细节。这将是一个宝贵的资源,帮助你深入学习和掌握Struts2和XWork2,从而提升你的Java Web开发...
Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它在Web应用开发中被广泛使用。...同时,这也是一个良好的实践机会,可以锻炼代码阅读和调试技巧,为未来的项目开发打下坚实基础。