zoukankan      html  css  js  c++  java
  • 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类型的参数

  • 相关阅读:
    [array] leetcode
    [array] leetCode-27. Remove Element
    [array] leetCode-26. Remove Duplicates from Sorted Array
    [array] leetCode-18. 4Sum -Medium
    [array] leetCode-15. 3Sum-Medium
    [array] leetCode-16. 3Sum Closest -Medium
    [array] leetCode-11. Container With Most Water-Medium
    [array] leetCode-4-Median of Two Sorted Arrays-Hard
    [array] leetCode-1-Two Sum-Easy
    【读书笔记与思考】Andrew 机器学习课程笔记
  • 原文地址:https://www.cnblogs.com/WongHugh/p/10720505.html
Copyright © 2011-2022 走看看