SpringMVC入门---用一个demo去理解SpringMVC
一、什么是SpringMVC
SpringMVC是基于java实现了MVC设计模式的请求驱动类型的轻量级web框架
通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
最重要的是,能够通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。
二、SpringMVC的优势
- (1)清晰的角色划分:
前端控制器(DispatcherServlet)
处理器映射器(HandlerMapping)
处理器适配器(HandlerAdapter)
视图解析器(ViewResolver)
处理器或页面控制器(Controller)
验证器(Validator)
命令对象(Command请求参数绑定到的对象就叫命令对象)
表单对象(Form Object提供给表单展示和提交到的对象就叫表单对象)。
- (2)分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要。
- (3)由于命令对象就是一个 POJO,无需继承框架特定 API,可以使用命令对象直接作为业务对象。
- (4)和 Spring 其他框架无缝衔接,是其它 Web 框架所不具备的。
- (5)可适配,通过 HandlerAdapter 可以支持任意的类作为处理器。
- (6)可定制性,HandlerMapping、ViewResolver 等能够非常简单的定制。 (可定制的意思,视图并不局限于jsp、html等)
- (7)功能强大的数据验证、格式化、绑定机制。
- (8)利用 Spring 提供的 Mock 对象能够非常简单的进行 Web 层单元测试。
- (9)本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。
- (10)强大的 JSP 标签库,使 JSP 编写更容易。
- ………………还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配
置支持等等。
三、SpringMVC请求响应流程
1、浏览器发送请求,被DispatcherServlet捕获
2、DispatcherServlet收到请求调用处理器映射器HandlerMapping。处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
3、DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter。
4、执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作,执行处理器。
5、Handler执行完成返回一个ModelAndView对象。
6、DispatcherServlet将ModelAndView对象传给ViewReslover视图解析器。
7、ViewResolver解析后返回具体View执行器方法执行后的返回结果,由DispatcherServlet交给视图解析器ViewResolver来处理,找到对应的结果视图,渲染视图,把需要在页面中展示的数据保存到request域 并将结果响应给浏览器。
SpringMVC执行流程图:
四、SpringMVC常见组件解析
1、DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于 mvc 模式中的 c,dispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性。
2、HandlerMapping:处理器映射器
HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
3、Handler:处理器
它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由Handler 对具体的用户请求进行处理。
4、HandlAdapter:处理器适配器
通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
5、View Resolver:视图解析器
View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。
6、View:视图
SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
五、创建一个简单SpringMVC的web项目
还不会用idea创建一个基于maven的web项目的,请看我以往文章:
Maven入门—如何在idea中配置Maven
1、pom.xml中添加依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.15.RELEASE</version>
</dependency>
</dependencies>
2、在resources中新建配置文件——SpringMVC.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns