MVC开发模式(此处说的是B/S下的MVC):
Model(模型):pojo,action,service,dao
View(视图):jsp
Controller(控制器):dispatcherServlet(Strus2中是Filter)
B/S下的应用流程:
1.用户对浏览页面有request请求,此时请求便传入,交给控制器。
2.Controller通过请求的内容,对Model进行操作控制,之后Model返回对应的结果,将内容填充到request中。
3.Controller通过返回的结果渲染View,再将View返回给浏览器,即Response。
在SpringMVC(SpringMVC本属于Spring,因此在SSM整合中,我们之前在整合Spring与Mybatis之后就无需再做别的整合了)中
流程则更加复杂:
1.用户对浏览页面有request请求,此时请求便传入,dispatcherServlet便是前端控制器。
2.前端控制器便通过HandlerMapping映射器查找Handler。
3.前端控制器得到返回的Handler之后,调用HandlerAdapter在收到之后去真正执行Handler。
4.Handler执行返回ModelAndView返回给HandlerAdapter,并由HandlerAdapter交付给前端控制器。
5.前端控制器这个时候就会去找View的解析器,ViewResolver,根据逻辑视图获得真正的视图。
6.ViewResolver返回对应的View(这个是
7.前端控制器通过对View的数据填充,渲染,得到视图结果,再将其作为Response返回给浏览器。
PS:ModelAndView是SpringMVC底层的一个对象,包括ModelAndView。
这么只看字面上的东西确实可能难以理解,大家可以看一下大佬们做的图示。
而且初学者可能看到这么多的组件,一时难以接受,我从自己学习时候的角度分析一下整体流程。
- 我作为一个用户的时候,访问一个界面,想要提交表单,便会点击提交按钮。(玩游戏时候,这或许就触发了机关吧)
- 点击提交之后,相当于是用户的一个请求传入了页面,通过网络连接(TCP)交给服务器。
- 服务器第一眼看到这个,便拿前端控制器分析这个请求,我该做什么?
- 前端控制器本身并不知道要做什么,于是他要去问Handler,但是Handler这个组件一直不愿意直接和别人打交道,于是只能通过HandlerMapping来找到Handler相关的联系组件,也就是Handler的适配器。
- 当找到这个适配器之后,前端控制器立即找到HandlerAdapter,希望能获取帮助,HandlerAdapter听了之后便画了个大概的布局规范,单独去找Handler执行。
- Handler看着这个画好的饼就开始执行,之后返回ModelAndView。
- HandlerAdapter收到以后立即返回给前端控制器。
- 前端控制器获得这些之后不认识这是什么,便去找视图解析器大哥去解析这些获得真正的View。
- 得到View以后,前端控制器再将自己得到的数据填充到视图中,并渲染视图,完成后作为响应返回给浏览器页面。
10.我作为用户也就得到了应有的新界面。