深入浅出学习Struts框架(十)-分析Struts框架实例5

    前几篇博客主要介绍的ActionServlet的初始化和Struts是如何完成截取字符串工作的,今天继续分析Struts截取完字符串所要做的工作。


    在struts专栏的开篇mvc小实例中我们编写了ActionMapping这样一个类、struts-config.xml配置文件,在那时我们对截取的字符串匹配,利用dom4j来读取了配置文件的信息,并且把他以ActionMapping的形式保存在内存中。


    今天我们深入的来看看struts是怎样拿到ActionMapping的,依旧和上篇的博客思路一样,利用断点调试的方式来进入源代码中,具体做法见上篇博客。


    紧接着上篇博客,我们的断点走出了processpath方法,

    

 

    在上一篇博客中我们已经讲解了,这个方法是用来截取字符串的,今天我们来看怎样获得ActionMapping的方法---processMapping。


    在此之前简单说一下ActionMapping,它的源代码中可以看出,其中最重要的属性和我们的mvc小实例中的ActionMapping类似,都是有path、type还有forwardMap,主要是对应的struts-config配置文件而来,这个就是保存这个配置文件的信息到内存中。


    具体的mvc小实例的ActionMapping代码如下:



    而Struts中的Actionconfig(因为ActionMapping是继承这个ActionConfig的,所以我们来看ActionConfig更加直接)的代码如下:

    


    

         

    从这两部分代码来看,更加印证了我在开篇写的mvc小实例是一个struts框架的雏形。


    讲完ActionMapping的一些内容后,相信对ActionMapping有所了解,那么系统是如何生成ActionMapping和如何找到ActionMapping的呢?这就是今天要说的整体:


    不知道读者还记不记得,我们在分析实例的第一篇的时候web.xml中有一个<load-on-startup>2</load-on-startup>  配置信息,这个信息就是说明了但服务器已启动就动态读取struts-config配置文件把配置文件的信息put到ActionMapping中。所以当我们运行服务器的时候,我们在内存中已经存在对应struts-config配置文件信息对应的ActionMapping。今天就是要通过processMapping读取这个ActionMapping类。

 

    进入断点调试,首先在processMapping方法上设置断点。

    


    进入源代码中:



    首先我们传入我们在上一步截取的路径,通过moduleConfig的findAction方法来查找ActionConfig,并且返回ActionMapping。具体代码是:



    如果找到,那么就讲ActionMapping存放到request的context中。代码:



    如果没有通过path找到mapping,则在Actionconfig中遍历为未知路径寻找mapping,如果找到则存放到request中,如果没有找到,则返回错误信息,具体代码如下:


    通过这一段代码我们就能通过截取的字符串来找到匹配的ActionMapping,并且为下面获取ActionForm做铺

垫。这篇博客主要是让读者明白,Struts是如何生成ActionMapping和如何获得ActionMapping的,下一篇博客要介绍如何获得ActionForm。敬请期待!

posted @ 2012-04-18 15:47  SpringMVC+Hibernate  阅读(245)  评论(0编辑  收藏  举报
友情链接:厦门事业单位