1. 什么是MVC?
MVC:是一种架构模式,将业务逻辑和页面展示分离,使程序分层、分工合作,既相互独立,又协同合作。
MVC的核心思想: 业务逻辑 与 页面展示 相分离。
MVC:Model-View-Controller
M(模型层):业务数据的信息表示,通常是业务实体
V(视图层):为用户呈现数据的页面
C(控制层):调用业务逻辑产生合适的数据(Model),同时传递数据(Model)给视图层(View)呈现给用户
2.什么是Spring MVC?
Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架。
spring mvc 是一个基于 mvc的 web框架。spring mvc 是spring框架的一个模块。
二、Spring MVC工作流程图
参考文章:https://blog.csdn.net/zuoluoboy/article/details/19766131/
1. 用户向服务器发送请求,请求被Spring 前端控制器 Servelt DispatcherServlet 捕获;
2. 前端控制器 Servelt DispatcherServlet 根据该 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核心组件
1、DispatcherServlet:前端控制器,核心
作用:接收请求,响应结果,相当于转发器,中央处理器,降低了组件之间的耦合性。
用户发送请求交给DispatcherServlet,DispatcherServlet是整个流程控制的中心,由它调用其他组件处理用户请求,分发到具体的对应Controller,从而获取到需要的业务数据Model,Model再通过DispatcherServlet传递给View完成页面呈现;DispatcherServlet的存在降低了组件的之间的耦合性。
2、HandlerMapping:处理器映射器
作用:根据请求的URL,找到对应的Handler,帮助DispatcherServlet找到对应的Controller
HandlerMapping负责根据用户请求找到Handler即处理器,SpringMVC提供了多种不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
3、HandlerInterceptor:Handler执行前后拦截器
HandlerInterceptor是个接口,里面包含三个方法:preHandle、postHandle、afterCompletion
分别在Handler执行前、执行中、执行完成后执行的三个方法
4、HandlerExecutionChain:HandlerMapping返回给DispatcherServlet的执行链
HandlerMapping返回给DispatcherServlet的不光有Handler,还有HandlerInterceptor
preHandle——>ControllerMethod——>postHandle——>afterCompletion
这个链如何实现的呢?使用了Java的反射机制reflection
5、HandlerAdapter:处理器适配器
作用:将各种Controller适配成DispatcherServlet可以使用的Handler,通过特定规则(HandlerAdapter要求的规则)去执行Handler,通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
6、Handler:处理器(需要工程师开发)
注意:编写Handler时需要HandlerAdapter的要求去做,这样HandlerAdapter才可以正确执行Handler
Handler是继DispatcherServlet前端控制器的后台控制器,在DispatcherServlet控制下对用户请求进行处理,Handler涉及业务需求,所以需要工程师针对用户需求进行开发,最终返回业务数据
7、ModelAndView:SpringMVC中对Model的一种表示形式
SpringMVC中有Model、Map,但是SpringMVC都会将其转化为ModelAndView,Model、Map都是ModelAndView的具体表现
8、ViewResolver:视图解析器
作用:进行视图解析,根据逻辑视图名解析成真正的视图View
ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成具体的页面地址,然后对View进行渲染,将处理结果通过页面展示给用户;SpringMVC提供了很多类型View视图,包括:jstlView、freemarkerView、pdfView、jsp、html等。
9、View:视图(需要工程师开发jsp、html)
View是一个接口,实现类支持不同的类型(jsp、html、freemarker、pdf等)
三,简单demo
1、新建Maven的web工程,引入依赖
org.springframework
spring-context
5.0.8.RELEASE
org.springframework
spring-web
5.0.8.RELEASE
org.springframework
spring-webmvc
5.0.8.RELEASE
org.springframework
spring-tx
5.0.8.RELEASE
org.springframework
spring-aspects
5.0.8.RELEASE
org.springframework
spring-orm
5.0.8.RELEASE
org.springframework
spring-jdbc
5.0.8.RELEASE
2、在 web.xml 中配置 前端控制器 DispatcherServlet
springDispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
springDispatcherServlet
/
元素
配置成 /,可支持 RESTfull风格,但会导致静态资源文件(jsp,css图片等)被拦截不能正常显示,但是可以通过配置来处理。推荐使用
配置成 /*,可以请求到 controller中,但是跳转到jsp时会被拦截,不能渲染jsp视图,不使用,一般用于filter
3、配置 spring 核心配置文件 springmvc.xml
起名可已定义,但是必须和web.xml 中的名称一致
4、编写Controller类
@Controller
@RequestMapping("/user")
public class UserController {
//http://localhost:8080/springmvcdemo/user/index
@RequestMapping(value="/index")
public String index() {
System.out.println("index");
return "index"; //视图名称
}
}
浏览器 index.Jsp文件访问
到此,SpringMVC 入门使用ok
ends~