• 一个没有深度描述,关于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

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

  • 相关阅读:
    201521123003《Java程序设计》第12周学习总结
    软工网络15团队作业8——敏捷冲刺日志的集合贴(Beta阶段)
    软工网络15团队作业4——敏捷冲刺日志的集合贴(Alpha阶段)
    beta版验收互评
    软工网络15团队作业8——Beta阶段敏捷冲刺(用户使用调查报告)
    软工网络15团队作业9——项目验收与总结
    团队作业5——测试与发布(alpha阶段)
    软工网络15团队作业8——Beta阶段敏捷冲刺(Day6)
    软工网络15团队作业8——Beta阶段敏捷冲刺(Day5)
    软工网络15团队作业8——Beta阶段敏捷冲刺(Day4)
  • 原文地址:https://www.cnblogs.com/wangly/p/12853323.html
Copyright © 2020-2023  润新知