目录
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会自动打开主页点,下面链接
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会自动打开主页点,下面链接
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会自动打开主页点,下面链接
上面如果age=10呢
<p><a href="springmvc/testParamsAndHeaders?username='hua'&age=10">testParamsAndHeaders?username='hua'&age=10</a></p>
重启tomcat,运行效果如下
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会自动打开主页点,下面链接
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会自动打开主页点,下面链接
3.6 REST风格
3.6.1 配置web.xml
通常的话,表单有着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";
}
注:
- 在DELETET和PUT中要加入@ResponseBody,否则会报“JSPs only permit GET POST or HEAD”错误
如果你确实是要返回数据,比如json数据,在@RequestMapping标注下面标注添加@ResponseBody
- 在DELETET和PUT中用隐藏按钮,其中 name="_method"名字不能修改,因为是固定的 ,
value值可以是DELETE/PUT等
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会自动打开主页点,下面链接,分别点它们即可