springMVC底层实现

Spring MVC处理的流程:

image

具体执行步骤如下:

1 首先用户发送请求给前端控制器,前端控制器根据请求信息(如url)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;图中的1、2步骤

2 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在spring web mvc中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;

处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);图中3、4、5步骤

3 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;图中的6、7步骤

4 前端控制器再次收回控制权,将响应返回给用户,图中的步骤8

Spring MVC 的运行原理

image
image

首先,用户向服务器发送请求,请求被前端控制器DispatcherServet截获

DispatcherServlet没有业务处理的能力,调用HandlerMapping处理器映射器

HandlerMapping根据xml配置和注解找到具体的Handler,并将处理器执行链(包括Handler和拦截器数组)返回给DispatcherServlet

DispatcherServlet调用HandlerAdapter处理器适配器

HandlerAdapter经过适配器调用具体的处理器(Controller,也称后端控制器)

Controller执行完返回ModleAndView

HandlerAdapter将ModleAndView返回给DispatcherServlet

DispatcherServlet将ModleAndView传给ViewReslover视图解析器

ViewReslover解析后返回具体的View

Dispatcher根据View进行视图渲染(将Modle填充至View)

DispatcherServlet响应用户 </pre>

springMVC执行细节:

DispatcherServlet在执行时会加载默认的配置文件:DispatcherServlet.properties来加载相关组件

image

image.png

可以在springMVC-servlet.xml中更改配置:

<pre style="margin: 0px 0px 0px 22px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px !important; font-family: &quot;Courier New&quot; !important;">    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
    <!-- 处理器映射器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
    <!-- 处理器适配器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean></pre>

也可以使用注解驱动来代替上面的 处理器映射器 和处理器适配器的配置:

  <!-- 配置注解驱动 -->
    <mvc:annotation-driven /></pre>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容