springmvc 之 @RequestMapping

Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求

在控制器的类定义及方法定义处都可标注@RequestMapping

  1. 类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录
  2. 方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于WEB 应用的根目录
  3. DispatcherServlet 截获请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法。
@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest {
    
     //实际上接受的请求路径就为/springmvc/testRequestMapping.action
    @RequestMapping("/testRequestMapping")
	public String testRequestMapping(){
		System.out.println("testRequestMapping");
		return "success";
	}
}

@RequestMapping 除了可以使用请求 URL 映射请求外,还可以使用请求方法、请求参数及请求头映射请求


         @RequestMapping 的 value、method、params 及 heads 分别表示请求 URL、请求方法、请求参数及请求头的映射条件,他们之间是与的关系,联合使用多个条件可让请求映射更加精确化。

         @Request的method属性【默认为post、get的方式都可以】
                   RequestMethod.POST:只接受post的方式请求

                   RequestMethod.GET:只接受get的方式请求

@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest {
	//表示接受post请求方式的请求
	@RequestMapping(method=RequestMethod.POST,value="/testMethod")
	public String testMethod(){
		System.out.println("testMethod");
		return "success";
	}
}

 如果使用了get的方式的请求就会报如下错误:

HTTP Status 405 - Request method 'GET' not supported

type Status report

message Request method 'GET' not supported

description The specified HTTP method is not allowed for the requested resource.

Apache Tomcat/6.0.39

@RequestMapping中的params和 headers支持简单的表达式:

  1. param: 表示请求必须包含名为 param 的请求参数 
  2. !param: 表示请求不能包含名为 param 的请求参数 
  3. param != value: 表示请求包含名为 param 的请求参数,但值不能为 value
  4. {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2的两个请求参数,且 param1 参数的值必须为 value1
//请求必须包含username与age的参数但是age不等于10且请求头中的Accept-Language的值必须为en-US,zh;q=0.8
@RequestMapping(value = "testParamsAndHeaders", params = { "username",
			"age!=10" }, headers = { "Accept-Language=en-US,zh;q=0.8" })
	public String testParamsAndHeaders() {
		System.out.println("testParamsAndHeaders");
		return SUCCESS;
	}

@RequestMapping 还支持 Ant 风格的 URL

 Ant 风格资源地址支持 3 种匹配符:

  1. ?:匹配文件名中的一个字符 –
  2. *:匹配文件名中的任意字符 –
  3. **:** 匹配多层路径

例如:

  • /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

猜你喜欢

转载自blog.csdn.net/qq_37776015/article/details/81096540