SpringMVC执行原理理解一
流程图:
一、首先我们仅仅只是在web.xml中对中心控制器Dispatchersrvlet进行注册,区别于之前的简单的Servlet写每一个Servlet都需要在web.xml中进行注册
二、当我们在前端网址栏输入/hello时,就是走了web.xml注册的Dispatchersrvlet,因为我们给Dispatchersrvlet配置的映射路径是“/”,所有的请求都会走他
三、然后委托请求给springmvc-servlet.xml中的处理器(可以理解为我们写的Controller类),然后处理器会调用业务对象进行一些处理,最后返回模型数据(就是返回ModelAndView)
四、执行跳转的页面
SpringMVC执行原理理解二(底层实现逻辑)
流程图:
1、DispatchServlet表示前置控制器,是整个SPringMVC的控制中心。用户发出请求,DispatchServlet接收所有请求并拦截请求
2、HandlerMapping为处理映射器。DispatchServlet会自行调用HandlerMapping根据请求的url查找Handler
3、HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello
4、HandlerExecution将解析后的信息传递给DispatchServlet,如解析控制器映射等
5、HandlerAdapter表示处理器适配器,按照特定的规则执行Handler
6、Handler让具体的Controller执行,执行Controller中调用业务的方法等等
7、Controller执行完毕会返回一个模型视图给HandlerAdapter,即代码中的 return mv实现的
8、HandlerAdapter将视图逻辑名或模型传递给DispatchServlet
9、DispatchServlet通过调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名
(1)视图解析器(ViewResolver)拼接逻辑视图名
<!--视图解析器:解析DispatcherServlet给他的ModelAndView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
(2)Controller中的逻辑视图名
mv.setViewName("hello"); //: 视图解析器会将这个hello,拼接成/WEB-INF/jsp/hello.jsp
10、视图解析器(ViewResolver)将解析的逻辑视图名传给DispatchServlet
11、DispatchServlet根据解析后的视图结果,调用具体的视图
12、最终视图呈现给用户
至此,对于SpringMVC底层执行原理,你已经深入的掌握了,笔者的学习和上道,这里还要感谢一位某站博主,西部开源-秦疆老师,细致入微,深入浅出的讲解,让我从一名技术小白到现在的入行甚至是愿意去钻研java中底层的东西。推荐大家可以多多关注这位无私奉献、支持开源的老师。开源是一种精神!
后续我也会持续更新关于SpringMVC的相关技术要点,欢迎大家的交流和指正,也希望各位能多多转发点赞加收藏,这也是笔者坚持共享学习笔记和学习心得的动力源泉。
最后还想发自肺腑的说出那句话:开源是一种精神!就像马斯克将近90%的新能源汽车开发底层代码共享那样!