搭建框架

03-@RequestMapping注解_请求头

引入依赖

03-@RequestMapping注解_spring_02

添加web模块,创建web.xml,注意创建了webapp目录必须要带蓝色的小圆点

03-@RequestMapping注解_spring_03

web.xml文件内容

03-@RequestMapping注解_请求头_04

控制器TestController.java

03-@RequestMapping注解_请求头_05

SpringMVC配置文件

03-@RequestMapping注解_请求头_06

index.html

03-@RequestMapping注解_mvc_07

tomcat实例部署新的SpringMVC工程

03-@RequestMapping注解_spring_08


控制器中有多个方法对应同一个请求的情况

@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系,SpringMVC接收到请求,就会找到映射关系中对应的控制器方法来处理这个请求

如果有两个或以上控制器方法的@RequestMapping注解的value属性值是相同的,表明它们处理的是同一请求路径的请求,此时会报错


@RequestMapping注解

标识的位置,该注解可以标识在类上,也可以标识在方法上

03-@RequestMapping注解_请求头_09

标识类时为设置映射请求路径的初始信息,标识方法时为设置映射请求路径的具体信息。即要先访问到初始信息然后才能访问到具体信息

在类和方法上都加上@RequestMapping注解

package com.atguigu.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/hello")
public class RequestMappingController {

@RequestMapping("/testRequestMapping")
public String success() {
return "success";
}
}

03-@RequestMapping注解_mvc_10

03-@RequestMapping注解_spring_11

当有两个控制器中的两个控制器方法的请求路径相同的需求时,即控制器方法的@RequestMapping注解的value值相同,此时是会报错的。就能通过在两个类上加@RequestMapping注解搭配不同的value值解决,即像这样访问:/user/list、/order/list,两个类的注解是/user和/order,两个控制器方法的注解都是/list


value属性

根据请求的地址匹配控制器方法,value属性值必须设置,value属性值可以是包含多个字符串的数组,请求地址满足其一就可以匹配上该控制器方法

03-@RequestMapping注解_请求头_12

03-@RequestMapping注解_请求头_13


method属性

根据请求的方式匹配控制器方法,该属性可以设置多个值,表示能接收多种请求方式的请求,若请求地址匹配value属性值但不匹配method属性,则浏览器端报405错误

get请求和post请求:get请求会将请求参数以name=value的方式用&拼接,然后用?拼接在请求地址的后面;而post还是以name=value的方式表示请求参数,并用&拼接请求参数,放在请求体中。get方式信息不安全,post相对安全。get方式传输速度快,post方式相对慢。get方式能传输的信息有限,post理论上无限制。文件上传时只能使用post方式

当没有设置method属性时,可以匹配任何方式的请求。都能正常访问

03-@RequestMapping注解_spring_14

当设置method属性只能匹配get请求后,只有匹配请求地址且请求方式为get的请求才能正常访问

03-@RequestMapping注解_请求头_15

当请求的地址匹配value值,但不匹配请求方式时报405错误

03-@RequestMapping注解_请求头_16


结合请求方式的派生注解

对于处理指定请求方式的控制器方法,SpringMVC提供了@RequestMapping的派生注解,处理get、post、put、delete请求的映射分别是@GetMapping、@PostMapping、@PutMapping、@DeleteMapping。即@GetMapping就是只处理get请求的@RequestMapping,不需要设置method属性

03-@RequestMapping注解_请求头_17

03-@RequestMapping注解_spring_18


测试form表单是否能够发送put和delete请求方式的请求

常用的请求方式有get、post、put、delete,可以对同一请求地址发起不同方式的请求,表示对同一资源执行不同的操作,如获取、修改、删除等

但目前浏览器只支持get和post方式,若在form表单提交时,对method属性设置为put或delete,则会按照默认的请求方式get处理

03-@RequestMapping注解_请求头_19

03-@RequestMapping注解_请求头_20

报405错误,说明浏览器实际发送的是get请求,请求地址正确但请求方式不匹配

03-@RequestMapping注解_请求头_21


@RequestMapping注解

params属性

根据请求参数匹配控制器方法,params属性是一个字符串类型的数组,请求参数要同时满足params属性的所有值才能匹配控制器方法。可以通过四种表达式设置请求参数和映射的匹配关系,"param":要求请求必须携带param参数,"!param":要求请求必须不能携带param参数,"param=value":要求请求必须携带param参数且值为value,"param!=value":要求请求必须携带param参数且值不为value

要求请求必须携带参数username

03-@RequestMapping注解_请求头_22

03-@RequestMapping注解_spring_23

否则报400的错误

03-@RequestMapping注解_mvc_24

请求中携带了username参数,在浏览器端(username=...)被解析为?username=...&password=...追加到请求地址后面,所以就能正常访问

03-@RequestMapping注解_请求头_25

要求请求中必须携带参数username和password,且password的值必须为123456

03-@RequestMapping注解_请求头_26


headers属性

根据请求头信息匹配控制器方法,headers属性是一个字符串类型的数组,请求头信息要同时满足headers属性的所有值才能匹配控制器方法。可以通过四种表达式设置请求头信息和映射的匹配关系,"header":要求请求必须携带header请求头信息,"!header":要求请求必须不能携带header请求头信息,"header=value":要求请求必须携带header请求头信息且值为value,"header!=value":要求请求必须携带header请求头信息且值不为value。若请求匹配@RequestMapping的value和method属性,但不匹配headers属性,则显示404错误即资源未找到

03-@RequestMapping注解_mvc_27

03-@RequestMapping注解_请求头_28

请求头信息中的Host要为localhost:8081才能匹配,否则报404错误

03-@RequestMapping注解_spring_29


SpringMVC支持ant风格的路径

?表示匹配任意单个字符,*表示匹配任意的0个或多个字符,**表示匹配任意的一层或多层目录(只能使用/**/xxx的方式)

03-@RequestMapping注解_mvc_30

03-@RequestMapping注解_请求头_31


SpringMVC支持路径中的占位符

通过请求地址传参时,可以使用?拼接name=value的方式:/deleteUser?id=1,也可以使用restful风格的方式:/deleteUser/1

SpringMVC路径中的占位符常用于restful风格中,在请求路径中将某些数据写成路径的方式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符表示传输的数据,再通过@PathVariable注解将占位符表示的数据赋值给控制器方法的形参

03-@RequestMapping注解_mvc_32

必须要给路径中的占位符{id}、{username}传值,否则报404错误

03-@RequestMapping注解_spring_33