项目知识点分析

从上一章中我们知道了接下来我们要去了解源码的项目(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 源码分析——项目分析的更多相关文章

  1. Struts2 源码分析——DefaultActionInvocation类的执行action

    本章简言 上一章讲到关于拦截器的机制的知识点,让我们对拦截器有了一定的认识.我们也清楚的知道在执行用户action类实例之前,struts2会先去执行当前action类对应的拦截器.而关于在哪里执行a ...

  2. Struts2 源码分析——拦截器的机制

    本章简言 上一章讲到关于action代理类的工作.即是如何去找对应的action配置信息,并执行action类的实例.而这一章笔者将讲到在执行action需要用到的拦截器.为什么要讲拦截器呢?可以这样 ...

  3. Struts2 源码分析——Action代理类的工作

    章节简言 上一章笔者讲到关于如何加载配置文件里面的package元素节点信息.相信读者到这里心里面对struts2在启动的时候加载相关的信息有了一定的了解和认识.而本章将讲到关于struts2启动成功 ...

  4. Struts2 源码分析——配置管理之PackageProvider接口

    本章简言 上一章讲到关于ContainerProvider的知识.让我们知道struts2是如何注册相关的数据.也知道如何加载相关的配置信息.本章笔者将讲到如何加载配置文件里面的package元素节点 ...

  5. Struts2 源码分析——配置管理之ContainerProvider接口

    本章简言 上一章笔者讲到关于Dispatcher类的执行action功能,知道了关于执行action需要用到的信息.而本章将会讲到的内容也跟Dispatcher类有关系.那就是配置管理中的Contai ...

  6. Struts2 源码分析——调结者(Dispatcher)之执行action

    章节简言 上一章笔者写关于Dispatcher类如何处理接受来的request请求.当然读者们也知道他并非正真的执行action操作.他只是在执行action操作之前的准备工作.那么谁才是正真的执行a ...

  7. Struts2 源码分析——过滤器(Filter)

    章节简言 上一章笔者试着建一个Hello world的例子.是一个空白的struts2例子.明白了运行struts2至少需要用到哪一些Jar包.而这一章笔者将根据前面章节(Struts2 源码分析—— ...

  8. Struts2 源码分析——Hello world

    新建第一个应用程序 上一章我们讲到了关于struts2核心机制.对于程序员来讲比较概念的一章.而本章笔者将会亲手写一个Hello world的例子.所以如果对struts2使用比较了解的朋友,请跳过本 ...

  9. Struts2 源码分析——前言

    笔者简言 笔者在博园里面注册是在二年前.可是那个时候我不知道要写些什么,也怕写出来被别人骂误人子弟.而现在却动笔了是因为前一段时间内我去参加一些大公司的面试,让笔者内心深处留下很多问号.最近三年来我一 ...

随机推荐

  1. C#使用Timer.Interval指定时间间隔与指定时间执行事件

    C#中,Timer是一个定时器,它可以按照指定的时间间隔或者指定的时间执行一个事件. 指定时间间隔是指按特定的时间间隔,如每1分钟.每10分钟.每1个小时等执行指定事件: 指定时间是指每小时的第30分 ...

  2. CentOS7(mini) 急速部署ASP.NET应用

    从mono 2.8+的时候就开始关注linux运行.NET的一些消息 最近闲来无事,发现mono官方已经提供有编译好的源,极大便利了部署过程,不需要自己去编译mono了 用Nancy.Owin写了一个 ...

  3. JAVA RMI例子

    RMI 是java语言的一个RPC框架,本文给出基础例子如下: 1.实现接口: public interface ICalc extends Remote { public int add(int p ...

  4. linux 2.6 驱动笔记(二)

    字符设备驱动 linux 2.6的字符驱动由cdev结构体描述,具体参考globalmem例子,代码主要分以下几部分: 1. 定义一个字符类型设备驱动的结构体 struct globalmem_dev ...

  5. 设计模式之美:State(状态)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):由 ConcreteState 指定它的后继 State. 意图 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改 ...

  6. Hadoop日记Day12---MapReduce学习

    一.MapReduce简介 1.1MapReduce概述 MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题.MR由两个阶段组成:Map和Reduce ...

  7. js模版引擎handlebars.js实用教程——关于HTML编码

    返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...

  8. 跟我一起云计算(3)——hbase

    hbase HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Go ...

  9. js菜单默认选中

    function defaultSelected() { var curr = $("#leftTree li[onclick*='" + $("#content_ifr ...

  10. NodeMCU初探

    对于ESP8266模块,早就想知道如何用其脚本语言, 自己先用的这个模块测试的 首先是先下载需要用到的工具和固件 链接:http://pan.baidu.com/s/1dF5NZ3N 密码:bziq ...