1. SpringMVC使用@RequestMapping 注解未控制器指定可以处理哪些URL请求
  2. 在控制器的类定义及方法处都可标注
    • RequestMapping
    • 类定义处:提供出部的请求映射信息。相当于WEB应用的根目录
    • 方法处:提供进一步的细分映射信息。相对于类定义处的URL。若类方法定义处未标注@RequestMapping,则方法处标记的URL相对于WEB应用的根目录
  3. DispatcherServlet截获请求之后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法。
  4. 示例:
  1. @Controller
  2. @RequestMapping("/springmvc")
  3. public class SpringMVCTest {
  4. private static final String SUCCESS = "success";
  5. /**
  6. * 1. @RequestMapping除了修饰方法,还可以修饰类
  7. * 2. 类定义处:提供初步的请求映射信息,相对于 WEB应用的根目录
  8. * 3. 方法处:提供进一步的细分映射信息。相对于类定义出的URL。若类定义处未标注@RequestMapping,则方法出标记的URL相对于WEB应用的根目录
  9. * @return
  10. */
  11. @RequestMapping("/testRequestMapping")
  12. public String testRequestMapping() {
  13. System.out.println("SpringMVCTest.testRequestMapping");
  14. return SUCCESS;
  15. }
  16. }

映射请求参数&请求头

标准的HTTP请求报头

image-20200910213758934.png

映射请求参数、请求方法或请求头

  1. @RequestMapping除了可以使用请求URL映射请求外,还可以使用请求方法、请求参数以及请求头映射请求。
  2. @RequestMapping的value、method、params及heads分别表示请求URL、请求方法、请求参数及请求头的映射条件,他们之间是的关系,联合使用多个条件可以让请求映射更加精确化。
  3. params和headers支持简单的表达式:
    1. param1:表示请求必须包含名为param1的请求参数
    2. !param1:表示请求不能包含名为param1的请求参数
    3. param1!=value1:表示请求包含名为param1的请求参数,但其值不能为value1
    4. {“param1=value1”, “param2”}:请求必须包含为param1和param2的两个请求参数,且param1参数的值必须为value1

使用@RequestMapping映射请求

  1. Ant风格资源地址支持3种匹配符:
    • ? :匹配文件名中的一种字符
      • :匹配文件名中的任意字符
    • 匹配多层路径
  2. @RequestMapping还支持Ant风格的URL:
    • /user/*/createUser:匹配
      • /user/aaa/createUser、/user/bbb/createUser等URL
    • /user/**/createUser:匹配
      • /user/createUser、/user/aaa/bbb/createUser等URL
    • /user/createUser??:匹配
      • /user/createUseraa、/user/createUserbb等URL

@PathVariable映射URL绑定的占位符

  1. 带占位符的URL是Spring3.0新增的功能,该功能在SpringMVC向REST目标挺进发展过程种具有里程碑的意义
  2. 通过@PathVariable可以将URL种占位符参数绑定到控制器处理方法的入参中:URL种的{XXX}占位符可以通过@PathVariable(“xxx”)绑定到操作方法的入参种。
  1. /**
  2. * @PathVariable 可以来映射URL中的占位符到目标方法的参数中。
  3. * @param id
  4. * @return
  5. */
  6. @RequestMapping("/testPathVariable/{id}")
  7. public String testPathVariable(@PathVariable("id") Integer id){
  8. System.out.println("SpringMVCTest.testPathVariable:" + id);
  9. return SUCCESS;
  10. }

REST

  1. REST:即Represenetation State Transfer 。(资源)表现层状态转化。是目前最流行的一种互联网软件构架。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多的网站采用。
  2. 资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个URL(统一资源定位符)指向它,每种资源对应一个特定的URL。要获取这个资源,访问它的URL就可以,因此URL即为每一个资源的独一无二的识别符。
  3. 表现层(Representation):把资源具体呈现出来,叫做他的表现层(Representation)。比如:文本可以用txt格式表现,也可以用html格式、xml格式、JSON格式表现,甚至可以采用二进制格式。
  4. 状态转换(State Transfer):每发出一个请求,就代表了客户端和服务器端的一次交互过程。HTTP协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须是哦通过某种手段,让服务器端发生“状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是“表现层状态转化”。具体说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。他们分别对应四种基本操作:GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源。
  5. 示例:
    1. -/order/1 HTTP GET :得到id=1的order
    2. -/order/1 HTTP POST:删除id=1的order
    3. -/order/1 HTTP PUT:更新id=1的order
    4. -/order HTTP POST:新增order
  6. HiddenHttpMethodFilter:浏览器form表单只支持GET与POST请求,而DELETE、PUT 等method并不支持,Spring3.0添加了一个过滤器,可以将这些请求转化为标准的HTTP方法,使得支持GET、POST、PUT与DELETE请求

@PathVariable 绑定URL占位符到入参

  1. 带占位符的URL是Spring3.0新增的功能,该功能在SpringMVC向REST目标挺进发张过程中具有里程碑的意义
  2. 通过@PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL中的 {XXX}占位符可以通过@PathVariable(“xxx”)绑定到方法的入参中。
    1. @RequestMapping("/delete/{id}")
    2. public String delete(@PathVariable("id") Integer id) {
    3. UserDao.delete(id);
    4. return "redirect:/user/list.action";
    5. }