2019-04-16 SpringMVC 学习笔记
1. 配置过程:
① 配置servlet(org.springframework.web.servlet.DiapatcherServlet)拦截请求
② SpringMVC的默认配置文件:servletName-servlet.xml
③ 可以通过配置servlet的 <init-param>标签的contextConfigLocation参数来指定配置文件
④ 配置文件配置扫描包
⑤ 配置文件配置视图解析器(org.springframework.web.servlet.view.InternalResourceViewResolver), 并配置前后缀
⑥ 创建@Controller类,使用@RequestMapping("")来修饰方法
2. 常用注解:
@RequestMapping(映射路径)
- 修饰位置:类、方法、同时在类和方法,路径为类+方法的组合
- 属性value:路径名
- 属性method:请求方式,如RequestMethod.GET;如果没有设置则可以接收任何方式
- 属性params:值为{字符串数组},声明请求的参数需要满足的条件(可百度SpringMVC params参数规则)
- 属性header:值为{字符串数组},声明请求的请求头需要满足的条件(与params属性类似)
@RequestParam(接收参数)
- 修饰位置:方法形参
- 属性value:表单name
- 属性defaultValue:默认值
- 属性required:参数是否可选
@PathVariable(路径参数)
- 修饰位置:方法形参
- 属性value:路径上的参数名
@CookieValue(获得cookie值)
- 修饰位置:方法形参
- 属性value:cookie中的key
3. 其他注解
@RequestHeader(获得请求头的某个值)
- 修饰位置:方法形参
- 属性value:请求头的key
@SessionAttributes(把方法参数Model内的keys放入session)
- 修饰位置:类
- 属性value:值为{字符串数组},属性key
@DateTimeFormat(前端数据传入后端时的格式化时间类型)
- 修饰位置:属性
- 属性pattern:"yyyy-MM-dd"这样的日期格式
4. 通过配置org.springframework.web.filter.CharacterEncodingFilter过滤器,设置参数encoding=UTF-8及forceEncoding=true解决POST乱码问题
5. 接收参数:
- 自动匹配:通过定义与表单name相同的方法形参接收
- 注解方式:形参增加@RequestParam修饰进行接收
6. 必须使用包装类类型的参数。因为当参数不存在时,SpringMVC会将参数的值转换为null;而使用基本类型会出现转换异常
7. 请求转发和跳转
- 请求转发:return "视图名称"
- 请求跳转: return "redirect:controller的mapping地址"
8. 请求路径:
- 带占位符的路径:/get/{id},通过@PathVariable("id")获得
- ant风格的路径:/test/*/hello (规则可百度查看SpingMVC的ant风格路径)
9. 参数传递:
① 从页面传入Controller:
- 使用@RequestParam传递形参(参考第5点)
- 形参使用POJO,前端使用与POJO一样属性名的name(name=age/name=address.xxx)
② 从Controller回显页面
- ModelAndView方式:返回值为包含页面地址和数据对象的ModelAndView对象,页面使用EL表达式${key.value}
- Map:形参包含一个Map对象,使用该容器存储数据,页面使用EL表达式${key.value}
- Model:形参包含一个Model对象,使用该对象存储数据,页面使用EL表达式${key.value};底层还是使用了Map
- 使用@SessionAttributes存储到session中,页面使用${sessionScope.key.value} (了解,基本不用)
10. 原生API(Servlet环境中的一些对象)
- HttpServletRequest、HttpServletResponse、HttpSession、Reader、Writer、InputStream、OutputStream
- 直接在形参定义即可获得
11. RESTful
① 通过使用不同的方式请求:
- GET 用来获取资源
- POST 用来新建资源
- PUT 用来更新资源
- DELETE 用来删除资源
② 使用步骤
- 增加过滤器HiddenHttpMethodFilter(表达只有GET、POST,所以需要增加过滤器进行处理)
- 处理DELETE时页面需要有一个name="_method" value="DELETE"的隐藏域,表单method="post"(ajax提交需要有_name参数?);controller需要设置映射的method=RequestMethod.DELETE
- 处理PUT时页面需要有一个name="_method" value="PUT"的隐藏域,表单method="post";controller需要设置映射的method=RequestMethod.put
12. 处理静态资源(在配置SpringMVC的servlet时候把除了jsp资源其他都拦截了)
- 在Spring配置中配置注解驱动<mvc:annotation-driven/>
- 在Spring配置中配置处理静态资源<mvc:resources location="/lib/" mapping="/lib/**"/>
13. SpringMVC处理请求的流程

14. SpringMVC可以配置默认的视图解析器、处理器映射器、处理器适配器
15. 前后端数据类型转换
- 使用@DateTimeFormat修饰Date类型的后端属性
- 自定义转换器(为了批量新增这类的场景):①实现接口Converter;②配置入类型转换器
16. 返回json类型的数据(jackson)
① 引入依赖包
② 配置注解@ResponseBody
16. json数据类型的提交
- 形参需要使用@RequestBody修饰
- 页面使用ajax的json类型提交
17. jsonp
- 接收callback参数,使用response返回拼接字符串callback(json)
18. 异常处理
- 增加异常处理方法,使用@ExceptionHandler修饰;接收一个Exception的形参;返回值为ModelAndView;@ExceptionHandler可以使用一个异常类作为参数
- 全局异常:还需要在类里增加@ControllerAdvice注解
19. 定义拦截器
① 类实现HandlerInterceptor接口
② SpringMVC文件中在<mvc:interceptors>配置拦截器
③ 在上面配置中可以声明放行的请求
20. 上传文件
① 增加依赖commons-fileupload、commons-io(?貌似新版本JDK还是Spring直接就有上传相关的类)
② 表单enctype="multipart/form-data"
③ 后端参数使用MultipartFile类型的参数
2019-04-16 SpringMVC 学习笔记的更多相关文章
- 史上最全的SpringMVC学习笔记
SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...
- springmvc学习笔记--REST API的异常处理
前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出 ...
- springmvc学习笔记---面向移动端支持REST API
前言: springmvc对注解的支持非常灵活和飘逸, 也得web编程少了以往很大一坨配置项. 另一方面移动互联网的到来, 使得REST API变得流行, 甚至成为主流. 因此我们来关注下spring ...
- SpringMVC:学习笔记(8)——文件上传
SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...
- springmvc学习笔记(简介及使用)
springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...
- springmvc学习笔记(常用注解)
springmvc学习笔记(常用注解) 1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如 ...
- SpringMVC学习笔记之二(SpringMVC高级参数绑定)
一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- 《Think Python》第16章学习笔记
目录 <Think Python>第16章学习笔记 16.1 Time 16.2 纯函数(Pure functions) 16.3 修改器(Modifiers) 16.4 原型 vs. 方 ...
- springmvc学习笔记(19)-RESTful支持
springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...
随机推荐
- java~google样式检查和命名规范
对于代码的样式和各种元素的命名都是我们架构师需要考虑的,目前在java世界里,比较流行使用java的规范,包括了代码样式检查. 代码样式检查插件 样式文件xml google命名规范 一 代码样式检查 ...
- mysql索引规范
索引并不是越多越好!索引可以提高查询效率,但会降低增删改效率.但多了甚至会降低查询效率. Innodb是按照主键索引的顺序来组织表,如没有建立主键,mysql会选择第一个非空唯一索引做为主键,或生成一 ...
- Golang struct结构
结构struct Go中的struct与C中的struct非常相似,并且Go没有class,代替了class的位置,但并没有代替class的功能 使用type struct{} 定义结构,名称遵循可见 ...
- golang标准库 context的使用
本文索引 问题引入 context包简介 示例 问题引入 goroutine为我们提供了轻量级的并发实现,作为golang最大的亮点之一更是备受推崇. goroutine的简单固然有利于我们的开发,但 ...
- 使用Golang搭建web服务
如何用golang搭建一个web服务呢?菜鸟官网的go web编程教程已经介绍了web服务器的工作原理,这里就不赘述了. 我们先看个例子:http.go package main import ( & ...
- .net工作流引擎ccflow新增支持PostgreSQL数据库的功能的发布说明
关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 各位驰骋工作流引擎爱好着,经过驰骋公司与正元公司的共同努力,ccflow支持Post ...
- Android 系统服务的获取与创建
在Android系统中,有一群很厉害的“家伙”,如果把Android系统比喻成一个大帮派,那么这群“家伙”的地位就像那各个分堂的堂主一样,所有的应用就像是各个小马哥,他们要做什么事情,都要堂主审批,审 ...
- bcrypt 安装不成功解决办法
同一个项目,公司和家里的 node.js 的版本不同,导致项目安装依赖包时 bcrypt 安装不成功. 家里的版本为:8.11.3 公司的版本为:10.14.2 在当前项目中执行完下面两个命令后,报错 ...
- Linux学习历程——Centos 7 diff命令
一.命令介绍 diff命令用于比较文本差异. diff以逐行的方式,比较文本文件的异同处.如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录. ------------- ...
- android测试用例编写
说明:android中写测试用例也是用junit,测试用例代码风格是junit3的风格.java中测试用例中使用junit3需要继承TestCase(junit4则不需要,直接用annotation即 ...