Struts2 源码分析——项目分析
项目知识点分析 |
从上一章中我们知道了接下来我们要去了解源码的项目(struts2-showcase)。而这一章将讲述我三年后在次接触struts2-showcase项目是一个什么样子的情况。我有一个工作习惯。在参于每一个新项目开发的时候,我都希望项目负责人能跟我讲讲这个项目到底用到了哪些知识点。这样子的目标是让我心中对项目会有一个大体上的概念。悲剧的是struts2-showcase作者是不可能为你这个小小的角色特意打电话或是EMAIL你的。所以我的入手点是看这个项目的需要的JAR。如图下。
从上面的图片里面的红框我们可以大概判断出。可能用的是struts2 + spring + hibernate架构。而界面是用sitemesh + struts2-Tiles来实现的。在这里我并不认了hibernate有被用到。因为我没有看到主要的hibernate包。而且这个项目并没有用到数据库方面的知识。所以最有可能是struts2 + spring 架构。为了进一步确定,我点开eclipse项目里同的WEB-INF来看。如下图
我可以看到applicationContext.xml,而没有看到hibernate相关的配置文件,我还特意去放代码的根目标(src)里面去找。这次我更加确定用的是Spring,没有用hibernate知识点。
项目总结:
1.主体架构:struts2 + spring 架构。
2.界面显示:sitemesh + struts2-Tiles。
3.其他:DWR框架,模板引擎(velocity,freemarker)。
struts2入口类 |
从上面的总结我们可以看到项目用到的相关知识点。当然这是我个人的分析并不全面。要分析一个开源的框架只有项目结合来分析才是最完美的。而接下来我们要做的是找到对应的入口类。显然我们要从Web.xml入手。从Web.xml上面我们可以找到我们需要的类。StrutsPrepareFilter类和StrutsExecuteFilter类。如图下(web.xml的部分内容)
从图片中我们可看到struts2的入口类,我们可以想像一点struts2是不是用过滤器(Filter)来实现MVC思想呢?而不是用Servlet呢?。由于笔者正真看struts2源码是在四年前,所以当笔看到上面图片的写法的时候,笔者脑中就会有这样子的想法:每一个用户请求都会通过struts2来进行过滤来找到对应用户要请求的类。然后类执行对应的方法并返回相应的结果。在通过struts2来回应相关的结果页面。如图下。
我有个毛病,有思想之后,我都会试着去证明一下。首先假设我的想法是对的话,那么我们的目标也明确下来。我们就是要了解struts2是什么样子处理每个用户请求。又是什么样子去处理找到对应的类。让我们在看看上面的Web.xml 的信息。我们会发现这条内容(org.apache.struts2.dispatcher.filter.StrutsPrepareFilter)。我们可以根据这个内容找到他所在的JAR包——struts2-core-2.5.2.jar。让我们点开他。如图下。
从上面的图片我们能发现在filter包下有四个类分别为:FilterHostConfig.class,StrutsExecuteFilter.class,StrutsPrepareAndExecuteFilter.class,StrutsPrepareFilter.class。从这点上我们就明白这将是未来要用到的第一个类。用心的程序员会发现上面还有com.opensymphony.xwork2。从这一点上我们不难发现这就是关于xwork2的源码。既是Webwork框架的源码。没有错,struts2是基于Webwork上面在进行研发的。所以如果是学过Webwork的人会很易容上手struts2。让我们回头过来看看这四个类。根据类名我就可以想像一种可能情况:StrutsExecuteFilter.class + StrutsPrepareFilter.class == StrutsPrepareAndExecuteFilter.class。我也试用把StrutsPrepareFilter类删除掉,只用StrutsExecuteFilter。不好意思,不行。我记得我以前有带过一个新生,他只用一个StrutsExecuteFilter类。而后做一个下午,最后受不了就是不知道哪里出错了。就跑过来找我。我一看:小样的,你是想让我打死你吗?
文章总结 |
这一章主要的目标是让我们明白我们将要应对的知识点有。spring相关的知识。还有界面相关的知识。同时让我们明白我们要入口类有哪一些。在进行struts2的Web.xml配置的时候,有俩种方式。一种是用StrutsExecuteFilter.class + StrutsPrepareFilter.class,一种是用 StrutsPrepareAndExecuteFilter.class。
Struts2 源码分析——项目分析的更多相关文章
- Struts2 源码分析——DefaultActionInvocation类的执行action
本章简言 上一章讲到关于拦截器的机制的知识点,让我们对拦截器有了一定的认识.我们也清楚的知道在执行用户action类实例之前,struts2会先去执行当前action类对应的拦截器.而关于在哪里执行a ...
- Struts2 源码分析——拦截器的机制
本章简言 上一章讲到关于action代理类的工作.即是如何去找对应的action配置信息,并执行action类的实例.而这一章笔者将讲到在执行action需要用到的拦截器.为什么要讲拦截器呢?可以这样 ...
- Struts2 源码分析——Action代理类的工作
章节简言 上一章笔者讲到关于如何加载配置文件里面的package元素节点信息.相信读者到这里心里面对struts2在启动的时候加载相关的信息有了一定的了解和认识.而本章将讲到关于struts2启动成功 ...
- Struts2 源码分析——配置管理之PackageProvider接口
本章简言 上一章讲到关于ContainerProvider的知识.让我们知道struts2是如何注册相关的数据.也知道如何加载相关的配置信息.本章笔者将讲到如何加载配置文件里面的package元素节点 ...
- Struts2 源码分析——配置管理之ContainerProvider接口
本章简言 上一章笔者讲到关于Dispatcher类的执行action功能,知道了关于执行action需要用到的信息.而本章将会讲到的内容也跟Dispatcher类有关系.那就是配置管理中的Contai ...
- Struts2 源码分析——调结者(Dispatcher)之执行action
章节简言 上一章笔者写关于Dispatcher类如何处理接受来的request请求.当然读者们也知道他并非正真的执行action操作.他只是在执行action操作之前的准备工作.那么谁才是正真的执行a ...
- Struts2 源码分析——过滤器(Filter)
章节简言 上一章笔者试着建一个Hello world的例子.是一个空白的struts2例子.明白了运行struts2至少需要用到哪一些Jar包.而这一章笔者将根据前面章节(Struts2 源码分析—— ...
- Struts2 源码分析——Hello world
新建第一个应用程序 上一章我们讲到了关于struts2核心机制.对于程序员来讲比较概念的一章.而本章笔者将会亲手写一个Hello world的例子.所以如果对struts2使用比较了解的朋友,请跳过本 ...
- Struts2 源码分析——前言
笔者简言 笔者在博园里面注册是在二年前.可是那个时候我不知道要写些什么,也怕写出来被别人骂误人子弟.而现在却动笔了是因为前一段时间内我去参加一些大公司的面试,让笔者内心深处留下很多问号.最近三年来我一 ...
随机推荐
- 调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令
调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (二)使用Windbg调试SQLSERVER ...
- Rubinius 2.0 发布,Ruby 虚拟机
Rubinius 2.0 发布了,官方发行说明请看这里. Rubinius是一个运行Ruby程序的虚拟机,其带有Ruby的核心库. Rubinius的设计决定了其调试功能的强大,使得在运行时常规的Ru ...
- 我的ORM之十-- MyOql实现原理
我的ORM索引 ORM的功能 两个基本功能 翻译:对象查询转化为SQL 映射:把查询结果转化为实体 更多功能 如果仅仅实现这两个功能,那这两个是可以独立的,实现起来也就很简单了.但MyOql的目标还有 ...
- 在VS2015 RC打开CTP中创建的工程
VS2015终于出了RC了!小伙伴们快来安装试用吧,地址在这里,还有新的Windows 10开发工具哦,要不然是开发不了Universal Windows App的,安装前记得卸载CTP版本. 新的R ...
- 《C#图解教程》读书笔记之四:类和继承
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.万物之宗:Object (1)除了特殊的Object类,其他所有类都是派生类,即使他们没有显示基类定义. ( ...
- 一个App完成入门篇(二)-搭建主框架
通过第一课的学习,你已经掌握了如何通过debug调试器来跟PC上的设计器联调来实时查看UI设计效果.调试代码了,接下来通过一系列的demo开发教学你将很快上手学习到如何开发一个真正的App. 要开发A ...
- Android SDK content Loader has encountered a problem.parseSdkContent failed
打开Eclipse,弹出Android SDK content Loader has encountered a problem.parseSdkContent failed,当点击detail按钮, ...
- [php入门] 4、HTML基础入门一篇概览
[php入门] 1.从安装开发环境环境到(庄B)做个炫酷的登陆应用 [php入门] 2.基础核心语法大纲 [php入门] 3.WAMP中的集成MySQL相关基础操作 1.HTML的作用 HTML是超文 ...
- 为 Exchange 服务器编写自定义的反垃圾插件
Exchange 2010 的 Edge Transport 包含了一些 Anti-spam 的 Feature,如图: 都开启了,但是呢,还是会有漏网之鱼,而且把这些邮件自己列为 Junk 也起不了 ...
- 30分钟带你快速入门MySQL教程
这是一篇真正适合初学者的MySQL数据库入门文章,哪怕你从来没有接触过数据库,或者说你从来没有听说过有数据库这东西,请一定要相信我,我当时就是这么过来的. 如果你刚开始接触MySQL数据库,或者你需要 ...