简介
特点
- 简介的web开发
- 支持Restful风格、支持静态资源、本地解析
- 灵活的url映射关系
- 跟 spring ioc 完好集成
- 对其他视图freemark、jsp、Velocity集成 spring mvc 本质上是进行了封装简化了开发流程。易用性,程序结构更清晰
- 基于注解的url映射
- http表单擦书转换
- 全局统一异常处理
- 拦截器实现
- 多视图控制器
Spring MVC的使用
Spring MVC的高级使用
1. 方法多mapping的设置
@RequestMapping(value = {"/value1","/value2"})
//使用这个两个 路径都可以访问
@RequestMapping(value = {"/value1","/value2"}, produces = MediaType.APPLICATION_JSON) //productes 可以指定请求的返回格式。
method = RequestMethod.GET //表示请求的方法
2. 传参的使用:
@RequestMapping(value = "/test/{userId}")
public String hello(@PathVariable Integer userId){ return null;}
//将请求的参数映射到方法参数里
3. Mapping相關的注解
@RequestMapping(method=RequestMethod.GET) <=> @GetMapping("/XXX")
@RequestMapping(method=RequestMethod.POST) <=> @PostMapping("/XXX")
GetMapping 和 PostMapping 等等 是spring 4.3新引入的注解,相当于注解的组合。
Spring MVC 的过程
Spring MVC代码分析
关键方法: DispartchServlet = > doDispartch();
- 模拟spring MVC
spring 源码解析
servlet解释
详解
-
dispatchServlet
默认配置
-
viewResolver 默认
-
request的流程
配置与应用
Spring mvc上下问初始化过程
M V C 上 下 文 即 x mlW e b A p pli c a ti o n C o n t e x t , 依 托 Di s p a t c h S e r vle t 的 和 c o n t e x t C o n fig L o c a tio n 进 行 创 建 和 初 始 化, 最 后 对 m v c 进 策 略 初 始 化 。 1、创建DispatchServlet 2、initServletBean 3、createWebApplicationContext 3.1、createBeanFactory 3.2、loadBeanDefinitions (contextConfigLocation) 3.3、registerBeanDefinition IOC 加载完比 4、initStrategies (初始化mvc 环境) 4.1、initHandlerMappings (初始化 映谢配置) 4.2、initHandlerAdapters(初始化适配器) 4.3、initHandlerExceptionResolvers 4.4、initViewResolvers 日
日常配置与使用
HandlerMapping 的类实现结构
HandlerAdapter 实现类结构图
ViewResolver 实现类图
BeanNameViewResolver: InternalResourceViewResolver: FreeMarkerViewResolver
spring mvc 使用了哪些handleMaping 与handleAdapter ? 2、简化的配置如何映谢的,如何调用的?
解决过程: 调试initStrategies 方法, 查看已初始化的 Maping 与Adapter 认识 <mvc:annotation-driven /> 原理 认识 NamespaceHandler 接口 查看 MvcNamespaceHandler 查看AnnotationDrivenBeanDefinitionParser 结论: 在 < m v c:a n n o t a tio n - d riv e n / > 对 应 的 解 析 器 , 自 动 向io c 里 面 注 册 了 两 个 B e a n D e finitio n 。 分 别 是 : R e q u e s t M a p pin g H a n dle r M a p pin g 与 B e a n N a m e U rlH a n dle r M a p pin g
RequestMapping 实现原理
//fixme