zoukankan      html  css  js  c++  java
  • 一个没有深度描述,关于springmvc工作原理过程以及涉及的设计模式

    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

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

  • 相关阅读:
    策略模式(Strategy)
    java.lang.reflect.Method
    java.lang.reflect.Constructor
    快速导航
    Java反射机制(Reflection)
    java.lang.Class
    java.lang.reflect.Field
    java常用类 --- Object
    vuex:弄懂mapState、mapGetters、mapMutations、mapActions
    超详细MySQL安装及基本使用教程
  • 原文地址:https://www.cnblogs.com/wangly/p/12853323.html
Copyright © 2011-2022 走看看