文章目录

  • 一、为什么要使用SpringMVC
  • 二、MVC设计模式
  • 三、SpringMVC架构



本文转载自



javaEE体系结构包括四层,从上到下分别是应用层,Web层,业务层,持久层。Struts和SpringMVC是web层的框架,Spring是业务层的框架,Hibernate和Mybatis是持久层的框架。

一、为什么要使用SpringMVC

很多应用层序的问题在于处理业务数据的对象和现实业务数据的视图之间存在紧密耦合,通常,更新业务对象的命令都是从视图本身发起的,是视图对任何业务对象更改都有高度敏感性。而且,当多个视图依赖于同一个业务对象时是没有灵活性的。

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

二、MVC设计模式

MVC设计模式的任务是将包含业务数据的模块与显示模块的视图解耦。这是怎样发生的?在模型和视图之间引入重定向层可以解决问题。此重定向层是控制器,控制器将接收请求,执行更新模型的操作,然后通知视图关于模型更改的消息。

springMVC一般在哪一层 springmvc对应的哪一层_MVC


springMVC一般在哪一层 springmvc对应的哪一层_springMVC一般在哪一层_02

三、SpringMVC架构

SpringMVC是Spring的一部分

springMVC一般在哪一层 springmvc对应的哪一层_MVC_03


SpringMVC的核心架构

springMVC一般在哪一层 springmvc对应的哪一层_MVC_04

具体流程

(1)第一站:DispatcherServlet
前端控制器收到请求后自己不进行处理,而是委托给其他解析器进行处理,作为统一访问点,进行全局的流程控制。
DispatcherServlet在web.xml中配置。DispatcherServlet 会拦截所有的请求,Servlet的拦截匹配规则要自己定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的action)来处理
“某某规则”:是根据你使用了哪个HandlerMapping接口的实现类的不同而不同。

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <!-- 拦截所有的请求 -->
    <url-pattern>/</url-pattern>
</servlet-mapping>

(2)第二站:处理器映射(HandlerMapping)
问题:典型的应用程序中可能会有多个控制器,这些请求到底应该发给哪一个控制器呢?
所以DispacherServlet会查询一个或者多个处理器映射来确定请求的下一站在那里。处理机映射会根据请求所携带的URL信息来进行决策
(3)第三站:控制器
HandlerAdapter接口处理器适配器,处理请求的映射。其实现类AnnotationMethodHandlerAdapter类通过注解,把一个URlL映射到Controller类的方法上。