`
zx_code
  • 浏览: 96899 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring MVC原理

    博客分类:
  • Java
阅读更多
Spring MVC原理


*注释:完整文章包括图片在附件,请下载


1. 在web.xml配置一个servlet,如下图,这个是针对所有请求都拦击,如果只想拦击自定义请求url-pattern可以写成*.do或者*.action,这些请求交给spring mvc处理

2. 这个servlet1由DispatcherServlet处理,DispatcherServlet继承关系如下图,从这个继承关系我们知道这是标准的HttpServlet子类。


3.Spring容器启动时会准备好所需的工具,主要初始化如下图。

4.初始化上传文件的视图

5.初始化HandlerMappings,用来存放controller层@RequestMapping()的映射地址,这个很重要。

通过调试可以看到handlerMappings保存对象

6.初始化handlerAdapters,这个很重要,主要是http请求交给那个处理。


handlerAdapters初始化保存对象

7. 初始化initViewResolvers,主要是初始化视图如jsp或者freemarker和velocity等等。

8,由于继承HttpServlet,所以每个请求的入口时doGet或doPost方法,FrameworkServlet类入口。

9.然后由processRequest处理完交给DispatcherServlet的doService方法处理。
10. 然后有doDispatch处理,如下图。

mappedHandler = getHandler(processedRequest);针对每个http请求,从如下图

找到一个合适的mappedHandler 。
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());针对每个http请求,从如下图

找到一个适配器HandlerAdapter ,用来处理http请求。
11.RequestMappingHandlerAdapter,这个类初始化的时候需要准备一些工具,如下图,afterPropertiesSet方法准备好argumentResolvers和returnValueHandlers还有initBinderArgumentResolvers。

12.argumentResolvers参数请求处理,如下图

通过这个方法,我们知道参数请求注入了很多类,这些类用来处理请求参数,从http请求参数到java对象都使用这些注入的类处理,其中自己也可以写一些类处理。使用注解的形式使用这些类。
13.returnValueHandlers返回对象的处理。如下图

放回对象的处理,返回对象如果使用如上图的注解,则会使用上图对应的注入对象处理。

14. invokeHandleMethod方法,处理请求,如下图。

ServletInvocableHandlerMethod requestMappingMethod = createRequestMappingMethod(handlerMethod, binderFactory);
这个方法针对每个请求new一个对象ServletInvocableHandlerMethod处理具体哪个类哪个方法处理http请求。

15.ServletInvocableHandlerMethod处理http请求。

16. ServletInvocableHandlerMethod的getMethodArgumentValues方法根据用户自定义的参数,选择合适的argumentResolvers解析参数,从http到java转换。

17.返回结果,从returnValueHandlers找到合适的对象解析返回的结果,可能是json或者xml等等。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics