项目知识点分析

从上一章中我们知道了接下来我们要去了解源码的项目(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. Python札记 -- 切片赋值

    一.疑惑    今天在看<Python Cookbook>第四章Python技巧的4.7小节时,发现一段初看起来让人疑惑的代码.该小节的任务是将一个包含列表(行)的列表,转换成一个新的列表 ...

  2. CQRS\ES架构介绍

    大家好,我叫汤雪华.我平时工作使用Java,业余时间喜欢用C#做点开源项目,如ENode, EQueue.我个人对DDD领域驱动设计.CQRS架构.事件溯源(Event Sourcing,简称ES). ...

  3. IOS 多线程05-OperationQueue 、GCD详解

      注:本人是翻译过来,并且加上本人的一点见解. 1. 开始 目前在 iOS中有两套先进的同步 API 可供我们使用:操作队列OperationQueue和 GCD .其中 GCD 是基于 C 的底层 ...

  4. location.href 一个小注意

    项目里有location.href = '#......'这一类的代码,一直以为某处做了特殊处理,变成前面有主机名的URL,看架构源码也没找到这种处理.今天灵光一现,自己是被JS高程将解位置方法那节给 ...

  5. [Spring框架]Spring 事务管理基础入门总结.

    前言:在之前的博客中已经说过了数据库的事务, 不过那里面更多的是说明事务的一些锁机制, 今天来说一下Spring管理事务的一些基础知识. 之前的文章: [数据库事务与锁]详解一: 彻底理解数据库事务一 ...

  6. css自适应宽高等腰梯形

    t1是梯形, ct是梯形里面的内容. 梯形的高度会随着内容的高度撑高.宽度随着浏览器窗口变宽. 梯形上窄下宽或上宽下窄可以通过 transform 的大小来修改. <div class=&quo ...

  7. java 类之间的关系

    一.继承 二.实现 三.组合

  8. Servlet开发技术,创建,以及Servlet的配置,web.xml的配置

    直接上图,不废话!!! 第一:首先在Eclipse的包资源管理器中,单机鼠标右键,在弹出的快捷键菜单中选择“新建”/Servlet命令,在弹出的对话框中输入新建的Servlet所在的包和类名,然后单击 ...

  9. C#打开新页面

    最常用的页面跳转(原窗口被替代):Response.Redirect("XXX.aspx"); 利用url地址打开本地网页或互联网:Respose.Write("< ...

  10. ASP.NET MVC 4使用PagedList.Mvc分页

    ASP.NET MVC中进行分页的方式有多种,在NuGet上有提供使用PagedList.PagedList.Mvc进行分页. 1. 通过NuGet引用PagedList.Mvc 在安装引用Paged ...