SpringMVC 个人学习总结

91 阅读1分钟

SpringMVC

sequenceDiagram
client->>dispatcherServlet: 1. send request
dispatcherServlet->>handleMapping: 2. 根据请求路径mapping 找到对应的handler与method
handleMapping->>dispatcherServlet: 3. 返回请求handleMaping
dispatcherServlet->>handlerAdapter: 4. 传递参数  转换器  根据注解信息 参数类型 request的字符串值 转化为参数
handlerAdapter->>handler:5. 将参数传递给handle 请求执行
handler->>handlerAdapter:返回结果
handlerAdapter->>dispatcherServlet:6. 返回执行结果
dispatcherServlet->>viewResolver:7. 根据注解  返回值   组装view
viewResolver->>dispatcherServlet:8. 返回view
dispatcherServlet->>view:9. 进行视图渲染
view->>dispatcherServlet:10. 返回渲染后视图
dispatcherServlet->>client: 11. 返回渲染后视图

SpringMVC 启动过程

  1. 启动tomcat。
  2. tomcat-> tomcat根据web/app/WEB-INF/web.xml开始执行servlet程序
  3. 若存在listener与context配置 优先初始化servlet父容器

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
  1. 根据协议创建dispatcherServLet对象
  2. context创建容器
  3. spring容器参数初始化(获取父容器设置)
  4. 容器初始化(监听容器初始化完成事件注册)
  5. 收到事件
  6. 执行(onfresh) 初始化dispatcher策略(handleMapping,mapAdapt,viewResolves,拦截器等)
  7. servlet初始化结束 大多数功能都在初始化dispatcher策略中实现

单例 观察者(自己观察自己) 模板方法 设计模式 责任链(初始化dispatcher策略)

其他细节名词(功能点)

dispatcherServlet init ->启动容器 controllerBean 创建子容器 xmlwebApplication refresh initStrategies (模板方法)

handleMaping 扫描bean对象与路径 构建map 路径与方法 mapping handler method @注解

handle beanName实现 beanName以/开头 Controller

handleMaping: 寻找bean 映射为 mapping handler method;

handleAdapt: 提前记录方法参数信息 字符串转任意类型的参数 可以自行实现 Adapt 责任链模式 controllAdvise 接口 转发(内部调用)与重定向(两次调用) Model是生成的 单独的 foword: 浏览器一次请求 重定向: 浏览器两次请求 model可以传值 session共享 flash @initBinder (Adapt转换) @sesionattrbutes(Session Model共享)

学习参考 www.bilibili.com/video/BV11P…