黑马SSM学习日记 | day03
SpringMVC
- SpringMVC是一种表现层框架技术,用于简便开发,可以替代servlet
- 需要创建一个类实现AbstractDispatchServletInitializer接口,并实现三个方法,
- Springmvc 需要创建servlet容器,然后springmvc对应的bean放入容器,让tomcat能运行
工作流程
启动阶段
- tomcat启动,并将dispatchservlet加载进servlet容器
- 然后执行创建Spring MVC的IOC容器的方法,创建一个WebApplicationContext,它是Spring的IOC容器,但是为Spring MVC服务
- 然后读取Java配置类,确定扫描路径
- 然后再读取bean类,并将其放入WebApplicationContext,
- 扫描每个Controller和@RequestMapping,建立映射关系,比如 /save -> UserController.save(),这些映射放于HandlerMapping组件中,至此,spring mvc初始化完成
bean的加载控制
- Spring MVC Bean和 Spring Bean都是IOC bean,但是由于它们所处的层级不同,生命周期不同,所以要由不同的ApplicationContext管理;
- Spring MVC Bean由WebApplicationContext管理,而Spring Bean(Service、DAO)由Root ApplicationContext管理
- DispatchServlet负责初始化并使用WebApplicationContext
请求与相应
responseBody注解将控制器的返回值作响应体,里面真正在起作用的是类型转换器HttpMessageConverter

rest风格 representation state transfer
- 简化开发
- 隐藏资源的访问行为
restController注解其实是替代了controller和resposebody,设置开发为rest风格
SSM整合
为了不产生歧义,就需要对表现层数据封装,返回统一格式

拦截器
- 过滤器Filter是servlet技术,而拦截器Interceptor是SpringMVC技术
- 过滤器对所有访问增强,而拦截器只对SpringMVC的访问增强
- 创建一个Interceptor类实现HandlerInterceptor接口,重写preHandle方法,只有preHandle方法return true之后,才会放行
总的流程
首先,请求到达tomcat(servlet容器),tomcat根据配置,将请求交给spring mvc的dispatchservlet,然后dispatchservlet会去查找HandlerMapping(用到了之前的那个map),然后去执行controller方法(其实这里是利用反射invoke()执行的)。如果方法加了ResponseBody,Spring 会将对象转为JSON格式,然后tomcat再将这个JSON格式的数据返回给前端。
- 在项目启动的时候,Spring会扫描所有的Controller,解析其中的RequestMapping,把这些URL和方法一一映射起来,存放在一个map里面
- 当请求来了的时候,dispatchservlet会拿着这个url去map里面直接get,速度极快
今日学习心得
把Spring MVC看完,终于明白之前为什么要那么写了,终于明白之前的哪些注释是啥意思了。对我来说,让我更加高兴的是,终于明白这个前端请求怎么与后端服务串起来,怎么访问到对应的资源,解答了很多以前的疑惑。现在看着这些注释,脑子里不再是一团浆糊了。继续加油!