一个没有深度描述,关于springmvc工作原理过程以及涉及的设计模式

小鱿鱼 2020-05-08

springmvc 本质上是对servlet的扩展,根据servlet规范,一般servlet包含有三个部分:

(1).实现servlet接口的程序

根据不同url配置不同servlet,客户端每次请求都会调用service方法处理请求。如是不在分布式环境中,web.xml一次声明产生一个servlet对应,即单例模式,如果实现singleThreadModel接口(2.4后不推荐使用),即原型模式(多例模式)。springmvc实现也就是DispatherServlet前端控制器,默认是单例模式,可以通过注解scope修改,单例模式会共享普通成员变量和静态成员变量,需要保证线程安全性,并发访问不会线程阻塞;原型模式只会共享静态成员变量。

(2).过滤器filter

使用了职责链模式,通过配置文件拦截请求,实现如权限,编码,日志,session处理等特定逻辑,客户端每次调用servlet都会先调用dofilter方法拦截在调用servlet。

(3).监听器listener

使用了观察者模式,spring的ContextLoaderListener会见厅servletContext创建和销毁事件

下面直接看一下,请求处理的流程

1.客户端发起请求,经过filter过滤,到达DispatcherServlet.

2.DispatcherServlet通过HandlerMapping找到对应handler(更近xml或者注解查找),返回处理对象handler和处理拦截器interceptors,DispatcherServlet是委派模式,HandlerMapping是策略模式.

3.DispatcherServlet通过HandlerAdapter调用实际的处理器Controller,HandlerAdapter是适配器模式.

4.Controller执行完成返回ModelAndView.

5.执行结果ModelAndView传递到DispatcherServlet,拦截器interceptors通过preHandle和postHandle在HandlerAdapter调用前后分别做拦截.

6.DispatcherServlet传给ViewResolver让它将逻辑是图解析成view,再次返回给DispatcherServlet.

7. DispatcherServlet根据View调用view.render渲染是视图写入response,然后在经过interceptors的afterCompletion方法和过滤器filter,最后返回给客户端.

参考:https://www.cnblogs.com/lbzhello/p/spring-mvc.html?utm_source=tuicool&utm_medium=referral
https://www.cnblogs.com/softidea/p/7245899.html
https://blog.csdn.net/Dongguabai/article/details/83713714
https://blog.csdn.net/xxxge/article/details/52036423
https://time.geekbang.org/column/article/217395
https://blog.csdn.net/jason0539/article/details/44956775
https://blog.csdn.net/u010644448/article/details/53764489
https://www.tuicool.com/articles/aqqiQzz
https://www.tuicool.com/articles/BJbeA3E
https://www.cnblogs.com/bert227/p/10902357.html

最后本文内容是我的浅薄理解,如有任何误解地方感谢指教。

相关推荐