springmvc的执行原理
在学习springmvc中可能大家都知道怎么编写代码和spring框架外的一些步骤,而不是真正的理解它的执行原理,那我们先来聊一聊它的执行原理!!!!
先给大家看张图:
![](https://img-blog.csdnimg.cn/1a7799d45f20446b86713981414a6558.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YeO5p-S5qyy,size_20,color_FFFFFF,t_70,g_se,x_16)
我来举一个简单的例子:在战争年代上级会分派任务给下级,不过并不是上级直接与下级联系而是通过情报部门进行加密解密然后,由情报部门根据任务类型和任务找到相
应的小组去完成任务。 在这里呢:上级就相当于我们的用户,任务就是用户给前端服务器的一个请求,情报部就是前端控制器里面的DispatcherServlet,而HandlerMapping就是
情报部里面所有的部门,HandlerExcution就是专门破译密码的部门,HandlerAdapter就是具体执行任务的小组。
到这里就很明显了:用户给前端服务器发送了一个请求,前端控制器DispatcherServlet接收了这个请求之后,根据这个请求去找到HandlerMapping映射器仓库。然后
映射器
仓库就分析
这个请求找到具体的映射器(在这里就是
HandlerExcution映射器
),然后将这个
HandlerExcution映射器返回给
前端控制器
的
DispatcherServlet,
DispatcherServlet就根据这个
返回回来的具体的映射器去适配这个映射器,适配完的这个映射器实际上就是一个Controller,然后由具体的
Controller去执行,执行完之后返回
一个ModelAndView,通过
ModelAndView去配置具体的视图解析器,然后将这个解析器返回给前端服务器调用,最后展示相应的视图,这就是springmvc基本的执行原理
啦!!!
原理聊完了,那咱们就做个简单的小测试来加深一些记忆吧...
1. 首先创建一个web项目,在项目的web.xml中配置 DiapatcherServlet:这个是springmvc的核心,也就是前端控制器,并绑定springmvc核心配置文件:
![](https://img-blog.csdnimg.cn/660cdcfcbcd44e75932ad1c6fa4f156a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YeO5p-S5qyy,size_20,color_FFFFFF,t_70,g_se,x_16)
2.有了这个DiapatcherServlet的前端控制器,那咱们就可以在springmvc配置中配置映射器,适配器和视图解析器啦(悄咪咪说一句,在真正的项目开发中是不需要配 置映射器和适配器的,因为这都是人家封装在springmvc中的,在这里我是为了让大家更清楚原理所以才加上去的 ):
![](https://img-blog.csdnimg.cn/34773c5ae9d14b6caf1809e6108a18b2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YeO5p-S5qyy,size_20,color_FFFFFF,t_70,g_se,x_16)
3.配置好这些东西后那咱们基本的springmvc就配好了,然后需要写一个 Contorller层来完成对前端数据的请求或者说对前端传来的数据进行处理:
![](https://img-blog.csdnimg.cn/cdc12c71d98e472cb617a8c270174b7f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YeO5p-S5qyy,size_20,color_FFFFFF,t_70,g_se,x_16)
4. 然后将Controller与前面的DiapatcherServlet前端控制器通过test.xml进行连接
![](https://img-blog.csdnimg.cn/63f66373ce6a4360a46cd4b1078884f0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YeO5p-S5qyy,size_20,color_FFFFFF,t_70,g_se,x_16)
5. 最后测试结果如图:
![](https://img-blog.csdnimg.cn/ee8c014d108e4ac3817c05d8f1dc7851.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YeO5p-S5qyy,size_20,color_FFFFFF,t_70,g_se,x_16)
到这了基本上springmvc的执行原理就介绍完了。