Spring MVC原理
*注释:完整文章包括图片在附件,请下载
1. 在web.xml配置一个servlet,如下图,这个是针对所有请求都拦击,如果只想拦击
自定义请求url-pattern可以写成*.do或者*.action,这些请求交给spring mvc处理
2. 这个servlet1由Dispatcher
Servlet处理,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的do
Service方法处理。
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的getMethodArgument
Values方法根据用户自定义的参数,选择合适的argumentResolvers
解析参数,从http到java转换。
17.返回结果,从returnValueHandlers找到合适的对象解析返回的结果,可能是json或者xml等等。
- springMVC原理.rar (508.8 KB)
- 下载次数: 2