spring-mvc 基础效能之源码debug

spring-mvc 基础功能之源码debug

        众所周知,spring-mvc是一个开源的web框架,以配置建议,容易上手而出名。下面就最简单的一次http请求,来分析spring-mvc是如何处理的。

       debug环境准备:参考这位兄台写的文章 http://blog.****.net/hankaibo/article/details/7238556?reload 我建立的是java project ,源码见附件,如果不打算亲自debug ,可忽略这步。

       先上大纲:


spring-mvc 基础效能之源码debug
可以看出,核心就是DispatcherServlet。

我们在DispatcherServlet 的doDispatcher里breakpoint一个。


spring-mvc 基础效能之源码debug
 核心方法就是这2个,简单理解,第一个获取处理的Class ,第二个是再加工一次。

进入getHandler


spring-mvc 基础效能之源码debug
 看一下HanderMapping的继承:


spring-mvc 基础效能之源码debug
 

这里的DefaultAnnotationHandlerMapping跟我们配置的xml对应起来了

再看看第二个方法:


spring-mvc 基础效能之源码debug
继续看一下 HandlerAdapter的继承
spring-mvc 基础效能之源码debug

如果我们配置了AnnotationMethodHandlerAdapter,这里就会看到。可见这两处就像钩子一样,可以DIY
 再看一下handlerAdapters:


spring-mvc 基础效能之源码debug
 里面有3个,我demo的配置文件并没有指定,这里是默认的配置获取到的。

再回到DispatcherServlet里面,上面准备工作都做好了,下面就是真正的处理
spring-mvc 基础效能之源码debug
 

本质上:
spring-mvc 基础效能之源码debug
这里通过了jdk的反射,获取了ModelAndView,然后进行渲染,重定向到我们指定的页面。
spring-mvc 基础效能之源码debug
 

通俗总结:

在web.xml中配置了filter,因此所有request都会经过filter,即springDispatcher。然后从map中获取此次请求的requestUrl对应的处理类Action,这样,就得到了处理类Class,再加上处理方法method,利用Java反射调用得到结果,再重定向。

 PS: 我用的maven打包,可以导入到eclipse用jetty启动,注意jetty的版本,我的是6.1.26,可以改成别的,可能会下载一些不同的依赖jar包。也可以让tomcat指定到这个目录,通过tomcat启动。