什么是SpringMVC
1、概述
Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。
查看官方文档:https://docs.spring.io/spring-framework/docs
我们为什么要学习SpringMVC呢?
Spring MVC的特点:
- 轻量级,简单易学
- 高效,基于请求响应的MVC框架
- 与Spring兼容性好,无缝结合
- 约定优于配置
- 功能强大:RESTful、数据验证、格式化、本地化、主题等
- 简洁灵活
Spring的web框架围绕DispatcherServlet[调度Servlet]设计。
DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解形式进行开发,十分简洁。
正因为SpringMVC好,简单、便捷、易学,天生与Spring无缝结合(使用SpringIoC和Aop),使用约定优于配置。能够进行简单的junit测试。支持Restful风格。异常处理,本地化,国际化,数据验证,类型转换,拦截器 等等......所以我们要学习。
最重要的一点还是用的人多,使用的公司多。
2、中心控制器
Spring的web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或以上版本的用户可以采用基于注解的controller声明方式。
Spring MVC框架像许多其它MVC框架一样,以请求为驱动,围绕一个中心Servlet分派请求及提供其它功能,DispatcherServlet是一个实际的Servlet(它继承自HttpServlet基类)。
SpringMVC的原理如下图所示:
前端控制器:DispatcherServlet
页面控制器:Controller接口实现类,或注释@Controller的类
3、SpringMVC执行原理
图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。
简要分析执行流程
-
DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
我们假设请求的url为:
http://loaclhost:8080/SpringMVC/hello
如上url拆分成三部分:
http://localhost:8080
服务器域名SpringMVC
部署在服务器上的web站点hello
表示控制器 -
HandlerMapping为处理器映射器(两种类型、三种实现)。根据url的
/hello
去寻找具体的handler(handler就是Controller对象)。两种类型:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping rg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
三种实现:
- 实现Controller接口
- 实现HttpRequestHandler接口
- @Controller注解
-
HandlerExecution(JDK1.8是HandlerExecutionChain)表示具体的handler
-
把handler返回给DispatcherServlet
-
HandlerAdapter(接口)表示处理器适配器,根据handler找到具体的HandlerAdapter的实现类
-
用HandlerAdapter去执行Controller中的方法
-
Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
-
HandlerAdapter将ModelAndView传递给DispatcherServlet。
-
DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的ModelAndView。
-
视图解析器将解析后的ModelAndView传给DispatcherServlet。
-
spatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
-
最终视图呈现给用户。