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 源码分析——前言
笔者简言 笔者在博园里面注册是在二年前.可是那个时候我不知道要写些什么,也怕写出来被别人骂误人子弟.而现在却动笔了是因为前一段时间内我去参加一些大公司的面试,让笔者内心深处留下很多问号.最近三年来我一 ...
随机推荐
- Linux常用目录
- Replication的犄角旮旯(九)-- sp_setsubscriptionxactseqno,赋予订阅活力的工具
<Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...
- 解剖SQLSERVER 完结篇 关于Internals Viewer源代码
解剖SQLSERVER 完结篇 关于Internals Viewer源代码 大家可能都用过Internals Viewer这个软件 <查看SQLSERVER内部数据页面的小插件Internals ...
- wireshark长时间抓包分多个文件
前言 说一说这个问题的由来,一般使用wireshark不需要长时间抓包的,但是有时候遇到网络通信中非常棘手的问题,例如一个小时出现一次或者几个小时出现一次问题的情况,这种情况下就必须长时间抓包了.但是 ...
- ddms(基于 Express 的表单管理系统)源码学习
ddms是基于express的一个表单管理系统,今天抽时间看了下它的代码,其实算不上源码学习,只是对它其中一些小的开发技巧做一些记录,希望以后在项目开发中能够实践下. 数据层封装 模块只对外暴露mod ...
- FTP文件管理
因为网站有下载文件需要和网站分离,使用到了FTP管理文件,这里做一个简单的整理. 1.安装FTP 和安装iis一样.全部勾选. 设置站点名称和路径. 设置ip. 身份授权选择所有用户,可以读写. 完成 ...
- 自定义样式的select下拉框深入探索
第一个版本: 首先实现自定义select下拉框应该具有的功能,我是选择将原来的select隐藏掉,自己在jquery代码中动态写进去<dl><dd><dt>这样的结 ...
- IT传统组织结构及新型扁平化组织
如今互联网企业正凶猛的改变人们衣食住行的方方面面,衣->淘宝,蘑菇街;食->大众点评,口碑;住->去哪,途牛:行->12306, 多次听到互联网的同行介绍他们就是要“快”,快速 ...
- Java-练习方法之冒泡排序
1. 实现冒泡排序算法. int[] daxiao=new int[]{45,23,7,75,87,34,98,3,13}; for(int i=0;i<8;i++) { for(int j=i ...
- MVVM架构~Knockoutjs系列之对象与对象组合
返回目录 在面向对象的程序设计里,对象是核心,一切皆为对象,对象与对象之间的关系可以表现为继承和组合,而在Knockoutjs或者JS里,也存在着对象的概念,今天主要说一下JS里的对象及对象的组合. ...