Welcome everyone

Spring MVC 处理流程

java 汪明鑫 1049浏览 0评论

这是我盗的一张比较详细的图=-=   (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 处理流程

喜欢 (0)

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz