核心(DispatcherServlet)
描述
DispatcherServlet属于前端控制器,起到分发作用
原理
解释:
- DispatcherServlet:前端调度器,负责将请求拦截下来分发到各控制器方法中
- HandlerMapping:相当于RequestMapping,负责根据请求的URL和配置@RequestMapping映射去匹配,匹配到会返回Handler(具体控制器方法)
- HandlerAdapter:负责调用Handler(具体控制器方法),返回视图的名字。Handler将他封装到ModelAndView(封装视图名,request域的数据)
- ViewReslover:根据ModelAndView里面的视图名地址去找到具体的jsp封装在view对象中
- View:进行视图渲染(将jsp转成html内容)最终response到客户端
注解
@RequestParam
获取请求的参数,默认必须传入
@RequestBody
springmvc获取json数据
@ResponseBody
springmvc返回json数据
对应关系图例
相关注解
- @JsonIgnore,返回时,忽略
- @JsonFormat,返回时,转换
@RequestHeader
获取请求头信息
@CookieValue
获取cookie中的值
@RequestMapping
属性
- value:映射地址
- params:设置请求必须携带或不携带某些参数{!param}
- headers:请求头当中必须包含某个值
- consumes:当前请求的内容类型必须是指定值,如application/json 注:URL支持通配符
@PathVariable
只需保证占位符名字和JavaBean的名字一样即可
特殊:如果是对象不需要加该注解
请求处理
Rest
客户端映射到服务器资源的一种架构设计,一种优雅的URL风格
静态资源访问
404问题
Springmvc将静态资源请求进行了拦截处理
解决思路
- 不拦截
- 拦截不做处理
类型转换器
- 底层自动转换
- 自定义类型转换
拦截器
采用AOP设计思想,跟过滤器类似,用来拦截处理方法在之前和之后执行一些跟主业务没有关系的一些公共功能
常见功能
权限验证、日志、异常记录,记录方法执行时间
实现
HandlerInterceptor接口
和过滤器区别
关系图
- 过滤器是基于函数回调的,而拦截器是基于java反射的
- 过滤器依赖于Servlet容器,拦截器依赖于springmvc
- 过滤器对几乎所有请求起作用,而拦截器只对springmvc请求起作用
- 拦截器可以访问处理方法的上下文,而过滤器不可以
异常处理
内置异常处理解析器
实现HandlerExceptionResolver
统一异常处理
@ControllerAdvice
- 全局异常处理
- 全局数据绑定
- 全局数据预处理
@ExceptionHandler
- 加在Controller中,只处理当前Controller中异常,优先级比全局高
- 加在@ControllerAdvice下,处理全局异常
问题
SpringMvc是否是单例的,如果是是否会有线程安全问题?
答:是,保证变量在方法中声明就不会有线程安全问题,但是成员变量的话会存在该问题
其他
下载
- Servlet原生
- ResponseEntity
上传
依赖commons-fileupload