对于一个不懂技术的人来说springMVC是什么呢?有人会说:“春天里的MVC”这也许就是春天里的几个字母,不错在我没有接触java框架的时候留给我的记忆就是这样的。那么现在接触到了就让我们来好好讨论一下springMVC到底是什么吧?
一、是什么?
百度百科上这样解释:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring
WebFlow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的Spring Web 框架还可以是 Struts这样的 Web 框架。
如果嫌弃这些太官方的话,就加入自己的理解:通过它的名字就可以理解为是“spring+MVC”这个框架做的一件事就是将它们两个结合起来,发挥spring和MVC最大的功能,从而使java开发更方便快捷。
二、做什么?
说到做什么?不得不想为什么要用它,别的是否可以代替呢?那么就带着这一系列的疑问来探索吧!
以上也说到它是spring和MVC的结合,既然结合那么必然是因为一方存在着一些不足,那么接下来就看看是什么让它们两个走到了一起。
通过策略接口,Spring
框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText和POI。Spring
MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP
技术。SpringMVC
分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。通过以上的解释是不是有点顿悟,利用MVC将spring的各个角色分离,从而使它们之间的定制更灵活。
三、核心是什么?
谈到核心不得不想到两张原理图:
图一
图二
以下对第一幅图做进一步说明,如果这个理解了那么第二张图也就OK啦!
1.用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获
2.DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回
3.DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
4.提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
HttpMessageConveter:将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5.Handler执行完成后,向DispatcherServlet返回一个ModelAndView对象
6.根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet
7.ViewResolver 结合Model和View,来渲染视图
8.将渲染结果返回给客户端。
四、总结
以上只是对springMVC的基础了解,别忘了纸上得来终觉浅,所以在今后的学习中还是要进一步实践,并多做一些demo来验证它的强大功能哦!加油!