目录

​3.1 @RequestMapping 映射请求​

​3.2 使用method属性来指定请求方式​

​3.3 params和headers​

​3.4 Ant风格​

​3.5 @PathVariable 映射 URL 绑定的占位符​

​3.6 REST风格​

​3.6.1 配置web.xml​

​3.6.2 Rest风格的URL​


@RequestMapping 映射请求,直白点来说就是你输入一个路径后,系统会找这个路径对应的类或函数处理这个路径请求。

那么怎么查找这个路径对应的函数呢?就需要先绑定,这个@RequestMapping就是绑定的功能。

文章代码是基于《hualinux springMVC 5.3:建立学习的springMVC项目》所建立的项目基础上进行操行的

 

3.1 @RequestMapping 映射请求

在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,修改代码如下:

package com.hualinux.srpingmvc.handers;

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


//@Controller表示要使用模板,如果用@RestController则表示直接把数据返回给浏览器
@Controller
public class SpringMVCTest {
/*
* 1. @RequestMapping除了修饰方法,还可以修饰类
* 2.
* 1) 类定义处:提供初步的请求映射信息。相对于WEB应用的根目录
* 2) 方法处:提供进一步的细分映射信息。
* 相对于类定义的URL。若类定义处未标注 @RequestMapping,则方法处标记的URL相对于WEB应用的根目录
* */
@RequestMapping("/springmvc/testRequestMapping")
public String testRequestMapping(){
System.out.println("testRequestMapping");
return "ok";
}

}

web/index.jsp页面的<body></body>标签中添加如下代码

<p><a href="springmvc/testRequestMapping">testRequestMapping</a></p>

运行tomcat,idea会自动打开主页点,下面链接

hualinux springMVC 5.4:@RequestMapping 映射请求_hualinux

hualinux springMVC 5.4:@RequestMapping 映射请求_mvc_02

 

3.2 使用method属性来指定请求方式

在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:

/*
* 使用method属性来指定请求方式
* */
@RequestMapping(value = "springmvc/testMethod",method = RequestMethod.POST)
public String testMethod(){
System.out.println("testMethod");
return "ok";
}

web/index.jsp页面的<body></body>标签中添加如下代码:

<p>
<form action="springmvc/testMethod" method="post">
<input type="submit" value="testMethod">
</form>
</p>

运行tomcat,idea会自动打开主页点,下面链接

hualinux springMVC 5.4:@RequestMapping 映射请求_spring_03

hualinux springMVC 5.4:@RequestMapping 映射请求_RequestMapping_04

 

3.3 params和headers

在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:

/**了解:可以使用params和headers来更加精确的映射请求。params和headers 支持简单的表达式串
*@return
*/
@RequestMapping(value="testParamsAndHeaders",
params={" username", "age 1=10"}, headers={"Accept-Language=en-Us ,zh;q=0.8"})
public String testParamsAndHeaders(){
System.out.println("testParamsAndHeaders");
return "ok";
}

web/index.jsp页面的<body></body>标签中添加如下代码:

<p><a href="springmvc/testParamsAndHeaders?username='hua'&age=20">testParamsAndHeaders?username='hua'&age=20</a></p>

 运行tomcat,idea会自动打开主页点,下面链接

hualinux springMVC 5.4:@RequestMapping 映射请求_springMVC_05

hualinux springMVC 5.4:@RequestMapping 映射请求_RequestMapping_06

上面如果age=10呢

<p><a href="springmvc/testParamsAndHeaders?username='hua'&age=10">testParamsAndHeaders?username='hua'&age=10</a></p>

重启tomcat,运行效果如下

hualinux springMVC 5.4:@RequestMapping 映射请求_spring_07

 

3.4 Ant风格

 使用@RequestMapping映射请求

●Ant风格资源地址支持3种匹配符:
- ? :匹配文件名中的一个字符
- * :匹配文件名中的任意字符
- ** : **匹配多层路径

●@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

 在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:

//注:只要符合 /springmvc/testAntPath/*/abc格式就行  
@RequestMapping("/springmvc/testAntPath/*/abc")
public String testAntPath(){
System.out.println("testAntPath");
return "ok";
}

 

web/index.jsp页面的<body></body>标签中添加如下代码:

<p><a href="springmvc/testAntPath/hua/abc">testAntPath</a></p>

运行tomcat,idea会自动打开主页点,下面链接

hualinux springMVC 5.4:@RequestMapping 映射请求_mvc_08

 

hualinux springMVC 5.4:@RequestMapping 映射请求_hualinux_09

3.5 @PathVariable 映射 URL 绑定的占位符

springMVC很灵活,它可以获取URL地址中的值,然后当作变量来输出,这里要使用@PathVariable注解,故名思意,就是路径变量的意思,通常的话,@PathVariable要使用,是一定要与@RequestMapping一起使用的,下面给出代码示例:

在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:

/*
* @PathVariable可以来映射URL中的占位符到目标方法的参数中。
* 正国为这样才支持REST风格的URL
* */
@RequestMapping("/springmvc/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id ) {
System.out.println("testPathVariable:"+id);
return "ok";
}

web/index.jsp页面的<body></body>标签中添加如下代码:

<p><a href="springmvc/testPathVariable/1">testPathVariable</a></p>

运行tomcat,idea会自动打开主页点,下面链接

hualinux springMVC 5.4:@RequestMapping 映射请求_mvc_10

hualinux springMVC 5.4:@RequestMapping 映射请求_springMVC_11

 

3.6 REST风格

3.6.1 配置web.xml

hualinux springMVC 5.4:@RequestMapping 映射请求_hualinux_12

通常的话,表单有着post,与get提交方式,而rest风格的URL,则有着get,post,put,delete这四种请求方式,但是浏览器却是只支持get与post,所以我们可以使用springMVC,把它进行转换,我们要利用org.springframework.web.filter.HiddenHttpMethodFilter这个类,这是一个过滤器,我们首先要在web.xml中配置它,请配置在第一个位置,不然的话,可能会先进入其它的过滤器,配置代码如下:

web/WEB-INF/web.xml添加如下配置

<!-- 配置 org.springframework.web.filter.HiddenHttpMethodFilter 可以把Post转为DELETE或PUT-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

3.6.2 Rest风格的URL

/**
Rest风格的URL.
*以CRUD为例:
*新增: /order POST
*修改: /order/1 PUT       update?id=1
*获取: /order/1 GET       get?id=1
*删除: /order/1 DELETE    delete?id=1
*
*如何发送PUT 请求和DELETE 请求呢?
* 1.需要配置HiddenHttpMethodF ilter
* 2.需要发送 POST 请求
* 3.需要在发送POST请求时携带一个name="_ method" 的隐藏域,值为 DELETE 或 PUT
*
*在SpringMVC的目标方法中如何得到id呢?
*使用 @PathVariable 注解
*/
 

 在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:

/* REST PUT方法,相当于数据库的更新*/
@RequestMapping(value = "/springmvc/testRest/{id}",method = RequestMethod.PUT)
@ResponseBody
public String testRestPut(@PathVariable("id") Integer id){
System.out.println("testRest PUT:"+id);
return "ok";
}

/* REST delete方法,相当于数据库的删除*/
@RequestMapping(value = "/springmvc/testRest/{id}",method = RequestMethod.DELETE)
@ResponseBody
public String testRestDelete(@PathVariable("id") Integer id){
System.out.println("testRest DELETE:"+id);
return "ok";
}


/* REST POST方法,相当于数据库的新增*/
@RequestMapping(value = "/springmvc/testRest",method = RequestMethod.POST)
public String testRest(){
System.out.println("testRest POST");
return "ok";
}

/* REST GET方法,相当于数据库的查询*/
@RequestMapping(value = "/springmvc/testRest/{id}",method = RequestMethod.GET)
public String testRest(@PathVariable("id") Integer id){
System.out.println("testRest GET:"+id);
return "ok";
}

注:

  1. 在DELETET和PUT中要加入@ResponseBody,否则会报“JSPs only permit GET POST or HEAD”错误

如果你确实是要返回数据,比如json数据,在@RequestMapping标注下面标注添加@ResponseBody

  1. 在DELETET和PUT中用隐藏按钮,其中 name="_method"名字不能修改,因为是固定的 ,

value值可以是DELETE/PUT等

hualinux springMVC 5.4:@RequestMapping 映射请求_RequestMapping_13

web/index.jsp页面的<body></body>标签中添加如下代码:

<p>
<form action="springmvc/testRest/1" method="post">
<input type="hidden" name="_method" value="PUT" />
<input type="submit" value="TestRest PUT"/>
</form>

<form action="springmvc/testRest/1" method="post">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="TestRest DELETE"/>
</form>


<form action="springmvc/testRest" method="post">
<input type="submit" value="testRest POST">
</form>
</p>
<p><a href="springmvc/testRest/1">test REST Get</a></p>

运行tomcat,idea会自动打开主页点,下面链接,分别点它们即可

hualinux springMVC 5.4:@RequestMapping 映射请求_spring_14