SpringMVC的学习
sublime使用
sublime真是编辑器之神,安装install package,然后安装插件 pretty json cmd+ctrl+j格式化json数据。
SpringMVC流程图
mvc简易模型图
mvc框架结构
springmvc相关内容
springmvc的使用步骤
- 配置web.xml:
配置前端控制器:tomcat启动时初始化、指定springmvc的配置文件的位置 - 编写springmvc的配置文件:
开启包扫描
配置视图解析器:指定如果去查找视图 - 编写自定义处理器
将处理器装配到容器中
编写请求的url映射关系:@RequestMapping(“xxx”):来映射要执行的方法
在@RequestMapping(“xxx”)下编写方法处理具体的业务逻辑,返回一个ModelAndView,其中可以封装视图名称和数据。
RequestMapping映射请求
- 标准URL映射
- Ant风格的映射:*(0个或多个字符)、?(单个字符)、**(0个或多个路径)
- Rest风格的映射:占位符
- 限定请求方法的映射:get、post、put、delete
- 限定参数的映射:限定哪些请求参数可以访问
使用json
响应json数据
@ResponseBody:
当一个处理请求的方法标记为@ResponseBody时,表示该方法需要输出其他视图(json、xml),springmvc会通过默认的json转化器转化输出。
1 | /** |
在使用jackson转换json数据时需要消息转换器HttpMessageConverter的支持,该消息转换器默认并没有开启。
在配置文件中注册注解驱动:配置该标签后会自动注册消息转换器。
1 |
使用pojo接收json数据
@RequestBody:接收一个json并且转换成一个对象。
接收一个json数据并反序列化为一个user对象。
1 | /** |
解决中文乱码问题
原因:使用的消息转换器换成了StringHttpMessageConverter,
该转换器中使用的默认的编码为ISO_8859_1:
解决方案:
修改消息转换器中的编码集
将注解驱动修改如下:
- 设置String的消息转换器
- 该消息转换器中有一个构造函数可以设置编码集,因此只要直接赋值即可。
1 |
@RestController
有时如果在一个Contoller中所有的方法都是用来响应json格式数据的,那么如果有多个方法,就需要在多个方法上使用@ResponseBody,这样太麻烦,springmvc提供了一个@RestController,将该注解使用在Controller类上,那么该controller中的所有方法都默认是响应json格式的数据了。
文件上传
步骤一:添加依赖
1 |
|
步骤二:配置文件上传解析器
需要在springmvc的配置文件中配置一个文件上传解析器(在spring-web包下),并且设置其解析器的某些参数,如上传文件大小和编码集等。
在springmvc-servlet.xml中配置:
注意:必须配置id属性,并且名称固定为multipartResolver,否则无法使用.
1 |
步骤三:Controller方法
注意:存放文件的目录upload需要先行创建好
1 | /** |
转发及重定向(forward、redirect)
返回值为字符串时,默认为视图名称。当返回值字符串是以”forward:”或者”redirect:”开头,则会被认为是转发或者重定向。
使用方式如下:
转发:forward:/hello/show.do(绝对路径)或者forward:show.do(相对路径)
重定向:redirect:/hello/show.do(绝对路径)或者redirect:show.do(相对路径)
/:表示绝对路径,指的是localhost:8080/springmvc(项目名称可以省略)
不带/:表示相对路径,相对于当前请求的路径
如果当前请求是:localhost:8080/springmvc(项目名称可以省略)/hello/show32
那么不带/:表示localhost:8080/springmvc(项目名称可以省略)/hello/
拦截器
HandlerExecutionChain是一个执行链,当请求到达DispatchServlet时,DispatchServlet根据请求路径到HandlerMapping查询具体的Handler,从HandlerMapping返回执行链给DispatcherServlet,其中包含了一个具体的Handler对象和Interceptors(拦截器集合)。
拦截器一般用于对处理器进行预处理和后处理。
应用场景:
1、权限检查:如登录检测,进入处理器前检测用户是否登录,如果没有登陆直接返回到登录页面。
2、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,统计处理器执行使用了多少时间。
springmvc的拦截器接口(HandlerInterceptor)定义了三个方法:
- preHandle调用Handler之前执行,称为预处理回调方法
返回值:true表示放行,后续业务逻辑继续执行false表示被拦截,后续业务逻辑不再执行,但之前返回true的拦截器的请求完成回调方法会倒叙执行
- postHandle调用Handler之后执行,称为后处理回调方法
- afterCompletion视图渲染完成之后执行,可以称为请求完成回调方法
拦截器的执行过程
拦截器的配置过程:
编写自定义拦截器实现HandlerInterceptor
在springmvc-servlet.xml中注册自定义拦截器
配置自定义拦截器
1 |
配置乱码过滤器
POST
1 |
|
GET
1 |
|