博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springmvc简述
阅读量:6070 次
发布时间:2019-06-20

本文共 2090 字,大约阅读时间需要 6 分钟。

Spring Web MVC 是一种基于 Java 的实现了 Web MVC 设计模式的请求驱动类型的轻量级 Web 框架,即使用了 MVC 架构模式的思想,将 web 层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC 也是要简化我们日常 Web 开发的。

另外还有一种基于组件的、事件驱动的 Web 框架在此就不介绍了,如 TapestryJSF 等。

Spring Web MVC 也是服务到工作者模式的实现,但进行可优化。前端控制器是 DispatcherServlet应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/

处理器为 Controller 接口(仅包含 ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的 POJO 类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。

 

让我们能非常简单的设计出干净的 Web 层和薄薄的 Web 层;进行更简洁的 Web 层的开发;天生与 Spring 框架集成(如 IoC 容器、AOP 等);

提供强大的约定大于配置的契约式编程支持;能简单的进行 Web 层的单元测试;支持灵活的 URL 到页面控制器的映射;

非常容易与其他视图技术集成,如 VelocityFreeMarker 等等,因为模型数据不放在特定的 API 里,而是放在一个 Model 里(Map 数据结构实现,因此很容易被其他框架使用);非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的 API提供一套强大的 JSP 标签库,简化 JSP 开发;支持灵活的本地化、主题等解析;更加简单的异常处理;对静态资源的支持;

 

Spring Web MVC 处理请求的流程

 

 

 

具体执行步骤如下:

 

1 首先用户发送请求————>前端控制器,前端控制器根据请求信息(如 URL)来决定选择哪一个页面控制器进行

 

处理并把请求委托给它,即以前的控制器的控制逻辑部分;图 2-1 中的 12 步骤;2 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在 Spring Web MVC

中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个 ModelAndView(模型数据和逻辑视图名);图 2-1 中的 345 步骤;

3 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;

 

2-1 中的步骤 674 前端控制器再次收回控制权,将响应返回给用户,图 2-1 中的步骤 8;至此整个结束。

 

问题:

 

1 请求如何给前端控制器?

2 前端控制器如何根据请求信息选择页面控制器进行功能处理?

3 如何支持多种页面控制器呢?

4 如何页面控制器如何使用业务对象?

5 页面控制器如何返回模型数据?

6 前端控制器如何根据页面控制器返回的逻辑视图名选择具体的视图进行渲染?

7 不同的视图技术如何使用相应的模型数据?

 

Spring Web MVC 核心架构图

 

 

 

 

 

Spring Web MVC 优势

1、清晰的角色划分:前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器( Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。

2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要;

3、由于命令对象就是一个 POJO,无需继承框架特定 API,可以使用命令对象直接作为业务对象;

4、和 Spring 其他框架无缝集成,是其它 Web 框架所不具备的;

5、可适配,通过 HandlerAdapter 可以支持任意的类作为处理器;

6、可定制性,HandlerMappingViewResolver 等能够非常简单的定制;

7、功能强大的数据验证、格式化、绑定机制;8、利用 Spring 提供的 Mock 对象能够非常简单的进行 Web 层单元测试;

8、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。

9、强大的 JSP 标签库,使 JSP 编写更容易。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/doudouxiaoye/p/5793563.html

你可能感兴趣的文章
[置顶] Android AlarmManager实现不间断轮询服务
查看>>
程序员搞笑故事:会哪几门语言?
查看>>
只用200行Go代码写一个自己的区块链!
查看>>
来谈谈云栖大会开源的顶级项目,开发者的福音!
查看>>
哈罗单车确认完成新一轮几十亿融资 春华资本与蚂蚁金服领投
查看>>
重庆构建互联互通新格局 从内陆腹地迈向开放前沿
查看>>
市场监管总局:把校园食品、保健食品作为监管重中之重
查看>>
成都动车段134组动车全面“体检”迎接春运
查看>>
韩国流行家中饮酒 2018年每家每月平均饮酒近6次
查看>>
隐藏黑钻数,修改前十榜单,网易星球给所有相信区块链的人一巴掌
查看>>
通过一个案例理解 JWT
查看>>
独家 | 日本机器学习领军人杉山将:为什么说弱监督学习是未来的热门?
查看>>
【火炉炼AI】机器学习020-使用K-means算法对数据进行聚类分析
查看>>
Python记一次自动脚本历程
查看>>
MVP+Kotlin源码体验
查看>>
makefile--伪目标语法与编程实例
查看>>
看完这个你还不会 插入排序 么
查看>>
Android-压缩大图到容量超小的图片
查看>>
聊聊springboot的HeapDumpWebEndpoint
查看>>
Flux OOM实例
查看>>