这是我盗的一张比较详细的图=-= (from https://blog.csdn.net/J080624/article/details/77990164)
由上图看到核心组件:
DispatcherServlet:请求转发
HandlerMapping(处理器映射器):寻找Controller
HandlerAdapter(处理器适配器):执行Controller
ViewResolver(视图解析器):解析ModelAndView
抽取一个简单点的图:
流程
1、用户请求发送至DispatcherServlet类进行处理。2、DispatcherServlet类遍历所有配置的HandlerMapping类请求查找Handler。3、HandlerMapping类根据request请求的URL等信息查找能够进行处理的Handler,以及相关拦截器interceptor并构造HandlerExecutionChain。4、HandlerMapping类将构造的HandlerExecutionChain类的对象返回给前端控制器DispatcherServlet类。5、前端控制器拿着上一步的Handler遍历所有配置的HandlerAdapter类请求执行Handler。6、HandlerAdapter类执行相关Handler并获取ModelAndView类的对象。7、HandlerAdapter类将上一步Handler执行结果的ModelAndView 类的对象返回给前端控制器。8、DispatcherServlet类遍历所有配置的ViewResolver类请求进行视图解析。9、ViewResolver类进行视图解析并获取View对象。10、ViewResolver类向前端控制器返回上一步骤的View对象。11、DispatcherServlet类进行视图View的渲染,填充Model。12、DispatcherServlet类向用户返回响应。
Spring MVC处理流程大学面阿里问过我,没回答上来。。。
瞅一眼
DispatcherServlet
可以看到Spring MVC的核心组件
不同的组件干不同的事情,职责分明,类的单一职责原则
下面看看这些组件的初始化
/**
* Initialize the strategy objects that this servlet uses.
* <p>May be overridden in subclasses in order to initialize further strategy objects.
*/
//初始化各组件
protected void initStrategies(ApplicationContext context) {
initMultipartResolver(context);
initLocaleResolver(context);
initThemeResolver(context);
initHandlerMappings(context);
initHandlerAdapters(context);
initHandlerExceptionResolvers(context);
initRequestToViewNameTranslator(context);
initViewResolvers(context);
initFlashMapManager(context);
}
现在饿了么用不到Spring MVC了,但既然是复习,还是要系统全面
我们都是开发纯SOA服务,不暴露http服务
如果需要和前端交互的接口,就利用一个中间层,把soa服务转为http服务
这个中间层还可以配置权限,还可以去注册中心查询服务器ip等
包括阿里也有中间件做这项工作,把hsf服务,转为http服务
这样做的好处时,后端开发纯soa服务,无需和前端交互,如果需要和前端交互,配置下转成http服务即可
更灵活,且前后端解藕更彻底,后端完全不用懂一点前端知识
那是不是可以理解如果这样的做法越来越流行,是不是意味着Spring MVC将会淡出历史的舞台呢?
转载请注明:汪明鑫的个人博客 » Spring MVC 处理流程
说点什么
您将是第一位评论人!