首页 > 学院 > 开发设计 > 正文

SpringMVC主要流程概述(学习笔记)

2019-11-06 07:10:48
字体:
来源:转载
供稿:网友

web层开发主要解决的课题主要有:

处理URL到框架的映射对Http请求参数的绑定Http响应的生成和输出

带着这样的问题去学习一个框架会对这个框架有一个整体的把握,接下来看一下SPRingMVC的六个核心接口和类。

DispatcherServletHandlerMapping 接口HandlerExecutionChainHandlerAdapter 接口HandlerInterceptor 接口View 接口

通过下图,先做一个直观的印象

Created with Raphaël 2.1.0Web页面Web页面DispatcherServletDispatcherServletControllerControllerViewView请求dispatchtch request创建model返回Model转发model渲染视图返回model响应

SpringMVC请求响应流程概述

SpringMVC的设计与web容器融合到一块儿,先获得http请求的输入流,再拿到请求头的信息。 先看一下DispatcherServlet的继承结构:

这里写图片描述

其中HttpServletBean、FrameworkServlet用于初始化容器,DispatcherServlet的doService方法会将初始化的数据放到request对象中,最终转发到doDispatch方法中。 getHandler( ) 在DoDispatch方法中首先会遍历DispatcherServlet中已经注册的RequestMapping实现类对象所组成的列表,返回第一个不为空的ReqeustMapping对象,而ReqeustMapping类只有一个方法:

HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;

接下来就会调用这个返回一个HandlerExecutionChain对象。 再看一下HandlerExecutionChain重要组成部分:

private final Object handler; private HandlerInterceptor[] interceptors;

它是由拦截器与handler对象组成,handler对象就是我们@Controller标注的类对象。 getHandlerAdapter( ) 接下来就会遍历一个有HandlerAdapter组成的list,同样返回第一个不为null的adapter HandlerAdapter接口也同样有一个重要的方法:

ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;

handle( ) 接下来就会调用adapter的handle方法, 传入一个HandlerExecutionChain对象。 执行顺序如下

遍历inteercepterList,执行preHandle方法调用handler对象在渲染视图之前执行postHandle方法渲染视图:将处理结果写入HttpServletResponse对象中执行interceptor的afterCompletion方法

最后得到ModelAndView对象。 View对象是ModelAndView的一个属性,获取到View对象后调用render方法将数据写入response对象中完成视图的渲染。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表