@RequestMapping注解
SpringMVC使用该注解让控制器知道可以处理哪些请求路径的,除了可以修饰方法,还可以修饰在类上。
– 类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录– 方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于WEB 应用的根目录 。
DispatcherServlet作为SpringMVC的前置控制器,拦截客户端请求后,通过该注解的映射信息确定请求的处理方法。
@RequestMapping接口定义:
@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Mappingpublic @interface RequestMapping {
下面是一个测试类
package com.led.test;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/** * @author Alan * @date 2018/5/25 22:03 */@Controller@RequestMapping("/test")public class SpringMVCTest { private static final String SUCCESS = "success"; @RequestMapping("/testRequestMapping") public String testRequestMapping(){ System.out.println("testRequestMapping"); return SUCCESS; }}
index.jsp加上发送对应请求的链接:
运行项目,点击该链接,可以看到请求路径是类上的请求路径和方法的请求路径拼接起来的,同时控制台也有对应输出。
@RequestMapping里面还可以使用method属性定义请求方式:
/** * 使用method定义请求方式 * @return */ @RequestMapping(value = "/testMethod",method = RequestMethod.POST) public String testMethod(){ System.out.println("test method"); return SUCCESS; }
index.jsp新增发送post方式的按钮,点击后成功跳转到success.jsp
如果使用超链接方式(其实发送的是GET请求),将报如下错误:
@RequestMapping映射请求参数(params)、请求方法或请求头 (headers)示例;
//使用params和headers可以更精确地映射请求 @RequestMapping(value = "/testParamsAndHeaders", headers = {"Accept-Language=zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"}, params = {"username","age!=10"}) public String testParamsAndHeaders(){ System.out.println("testParamsAndHeaders"); return SUCCESS; }
index.jsp加上测试链接:
由于params和headers都符合设置的值,所以成功返回success.jsp,使用说明如下
params 和 headers支持简单的表达式:– param1: 表示请求必须包含名为 param1 的请求参数– !param1: 表示请求不能包含名为 param1 的请求参数– param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1– {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2的两个请求参数,且 param1 参数的值必须为 value1
支持Ant风格url
@RequestMapping("/testAntPath/*/good") public String testAntPath(){ System.out.println("testAntPath"); return SUCCESS; }
index.jsp:
箭头的地方改成任意值都能跳转到success.jsp,这就是通配符的作用:
Ant 风格资源地址支持 3 种匹配符:– ?:匹配文件名中的一个字符– *:匹配文件名中的任意字符– **:** 匹配多层路径