微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringMVC03:什么是SpringMVC

什么是SpringMVC

1、概述

WulUyt.png

Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。

查看官方文档:https://docs.spring.io/spring-framework/docs

我们为什么要学习SpringMVC呢?

Spring MVC的特点:

  1. 轻量级,简单易学
  2. 高效,基于请求响应的MVC框架
  3. 与Spring兼容性好,无缝结合
  4. 约定优于配置
  5. 功能强大:RESTful、数据验证、格式化、本地化、主题
  6. 简洁灵活

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基类)

WuNmqA.png

SpringMVC的原理如下图所示:

前端控制器:dispatcherServlet

页面控制器:Controller接口实现类,或注释@Controller的类

WuUXnJ.png

3、SpringMVC执行原理

W192se.png

图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。

简要分析执行流程

  1. dispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,dispatcherServlet接收请求并拦截请求。

    我们假设请求的url为:http://loaclhost:8080/SpringMVC/hello

    如上url拆分成三部分:

    http://localhost:8080服务器域名

    SpringMVC部署在服务器上的web站点

    hello表示控制器

  2. HandlerMapping为处理器映射器(两种类型、三种实现)。根据url的/hello去寻找具体的handler(handler就是Controller对象)。

    两种类型:

    org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
    rg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
    

    三种实现:

    • 实现Controller接口
    • 实现HttpRequestHandler接口
    • @Controller注解
  3. HandlerExecution(JDK1.8是HandlerExecutionChain)表示具体的handler

  4. 把handler返回给dispatcherServlet

  5. HandlerAdapter(接口)表示处理器适配器,根据handler找到具体的HandlerAdapter的实现类

  6. 用HandlerAdapter去执行Controller中的方法

  7. Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。

  8. HandlerAdapter将ModelAndView传递给dispatcherServlet。

  9. dispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的ModelAndView。

  10. 视图解析器将解析后的ModelAndView传给dispatcherServlet。

  11. spatcherServlet根据视图解析器解析的视图结果,调用具体的视图。

  12. 最终视图呈现给用户

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐