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 启动过程
- 启动tomcat。
- tomcat-> tomcat根据web/app/WEB-INF/web.xml开始执行servlet程序
- 若存在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>
- 根据协议创建dispatcherServLet对象
- context创建容器
- spring容器参数初始化(获取父容器设置)
- 容器初始化(监听容器初始化完成事件注册)
- 收到事件
- 执行(onfresh) 初始化dispatcher策略(handleMapping,mapAdapt,viewResolves,拦截器等)
- 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共享)