这里是修真院后端小课堂,每篇分享文从
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】
八个方面深度解析后端知识/技能,本篇分享的是:
【SpringMVC工作原理。】
大家好,我是IT修真院深圳分院第十三期学员王东东,一枚正直纯洁善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务二,扩展思考中的知识点——SpringMVC工作原理。
一、背景介绍
SpringMVC是Spring的一个后续产品,其实就是Spring在原有基础上, 又提供了web应用的MVC模块,可以简单的把SpringMVC理解为是Spring的一个模块(类似AOP,IOC这样的模块),网络上经常会说SpringMVC和Spring无缝集成,其实SpringMVC就是Spring的一个子模块。
二、知识剖析
1.MVC设计模式
MVC设计模式
M-Model 模型
V-View 视图(做界面的展示 jsp,html……)
C-Controller 控制器(接收请求—>调用模型—>根据结果派发页面)
2.XML配置文件
主要有两个配置文件,等下结合代码来讲
①web.xml文件,启动前端控制器
②applacationContext.xml文件,对前端控制器的配置
3.SpringMVC流程
(1) Http请求:客户端请求提交到DispatcherServlet。
(2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。
(3) 调用处理器:DispatcherServlet将请求提交到Controller。
(4)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。
(5)处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
(6) Http响应:视图负责将结果显示到客户端。
4.其中的几个组件
(1)DispatcherServlet接口:Spring提供的前端控制器,所有的请求都有经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。
(2)HandlerMapping接口:能够完成客户请求到Controller映射。
(3)Controller接口:需要为并发用户处理上述请求,处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器
(4)ViewResolver接口:Spring提供的视图解析器(ViewResolver)在Web应用中查找View对象,从而将相应结果渲染给客户。
三、常见问题
1.中文乱码问题
2.Controller返回值设置与jsp文件名不符,导致跳转失败
四、解决方案
1.value适合给变量注入属性,ref注入的是映射属性。
2.规范返回值,并在编写代码时进行测试。
五、编码实战
六、扩展思考
DispatcherServlet:
从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。
它是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项:
(1)截获符合特定格式的URL请求。
(2)初始化DispatcherServlet上下文对应WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。
(3)初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。
注:本人初学java者,如有不对敬请指出,谢谢!
七、参考文献
百度百科、博客园、CSDN
八.更多讨论
1.运行mvn jetty run报错,提示多了一个文件,什么原因?
spring-web和org.springframework.web.servlet中都有一个web-fragment.xml文件,导致jetty读取时报错。
2.传统三层架构是怎样的?
用一张图清晰地表达出传统三层的结构:
这里出BUG了,图片传不上来,
请复制下面的网址到DSCN上看...抱歉..
3.Springmvc的优点都有哪些?
(1)它是基于组件技术的。全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java组件.并且和Spring提供的其他基础结构紧密集成.
(2)
不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)
(3)可以任意使用各种视图技术,而不仅仅局限于JSP
(4) 支持各种请求资源的映射策略
(5)它应是易于扩展的
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。