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 学习笔记的更多相关文章

  1. 史上最全的SpringMVC学习笔记

    SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...

  2. springmvc学习笔记--REST API的异常处理

    前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出 ...

  3. springmvc学习笔记---面向移动端支持REST API

    前言: springmvc对注解的支持非常灵活和飘逸, 也得web编程少了以往很大一坨配置项. 另一方面移动互联网的到来, 使得REST API变得流行, 甚至成为主流. 因此我们来关注下spring ...

  4. SpringMVC:学习笔记(8)——文件上传

    SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...

  5. springmvc学习笔记(简介及使用)

    springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...

  6. springmvc学习笔记(常用注解)

    springmvc学习笔记(常用注解) 1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如 ...

  7. SpringMVC学习笔记之二(SpringMVC高级参数绑定)

    一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...

  8. springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

  9. 《Think Python》第16章学习笔记

    目录 <Think Python>第16章学习笔记 16.1 Time 16.2 纯函数(Pure functions) 16.3 修改器(Modifiers) 16.4 原型 vs. 方 ...

  10. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

随机推荐

  1. 接口自动化:HttpClient + TestNG + Java(四) - 封装和测试post方法请求

    在上一篇中,我们对第一个自动化接口测试用例做了初步优化和断言,这一篇我们处理POST请求. 4.1 发送POST方法请求 post方法和get方法是我们在做接口测试时,绝大部分场景下要应对的主要方法. ...

  2. 从PRISM开始学WPF(三)Prism-Region-更新至Prism7.1

    [7.1update]在开始前,我们先看下版本7.1中在本实例中的改动. 首先,项目文件中没有了Bootstrapper.cs,在上一篇的末尾,我们说过了,在7.1中,不见推荐使用Bootstrapp ...

  3. Django学习笔记(2)——模型,后台管理和视图的学习

    一:Web投票示例 本节我们首先从全局范围再复习一下Django的概念,让自己对Django的设计理念, 功能模块,体系架构,基本用法有初步的印象. Django初始的详细博客内容:请点击我 该应用包 ...

  4. C++项目中采用CLR的方式调用C#编写的dll

    1.注意事项:在编写C#DLL类库时,最好不要出现相同的命名空间,否则在C++中调用可能会出现编译错误.2.将C#的源码生成的“dll”文件复制到C++项目中的Debug目录下3.将C++项目属性设置 ...

  5. C#之使类型参数--泛型

    1.泛型是什么 泛型的就是“通用类型”,它可以代替任何的数据类型,使类型参数化,从而达到只实现一个方法就可以操作多种数据类型的目的. 2.为什么使用泛型 举一个比较两个数大小的例子: 以上例子实现in ...

  6. div悬浮窗口设计来完成注册页面

    login.jsp页面 <script type="text/javascript" src="js/register.js"></scrip ...

  7. XSS攻击之窃取Cookie

    10 年前的博客似乎有点老了,但是XSS 攻击的威胁依然还在,我们不得不防. 窃取Cookie是非常简单的,因此不要轻易相信客户端所声明的身份.即便这个Cookie是在数秒之前验证过,那也未必是真的, ...

  8. .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比

    Pop分组模式和表格模式对比 关键词: 驰骋工作流引擎  表单引擎  ccflow   .net开源工作流  jflow Java工作流引擎 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 a ...

  9. 图像的膨胀与腐蚀——OpenCV与C++的具体实现

    目录 1. 膨胀与腐蚀的原理 2. 膨胀的具体实现 1) OpenCV实现 2) C/C++实现 3) 验证与结果 3. 腐蚀的具体实现 1. 膨胀与腐蚀的原理 膨胀与腐蚀是数学形态学在图像处理中最基 ...

  10. SQL 修改字段类型和长度,常见类型介绍及数据库设计工具PowerDesigner和astah

    1.电话字段设置24个Byte竟然不够,好吧设置为50的长度. alter table <表名> alter column <字段名> 新类型名(长度) 举例: ) 2.删除一 ...