RestFul风格
ResFul?
- 一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制
URL定义
- 资源:互联网所有的事物都可以被抽象为资源
- 资源操作:使用POST(添加)、DELETE(删除)、PUT(修改)、GET(查询),使用不同方法对资源进行操作。
@PathVariable
- 该注解用来映射请求URL中绑定的占位符。通过@PathVariable可以将URL中占位符的参数绑定到controller处理方法的参数中
- 请求
http://localhost:8081/springmvc_2/test1/张三/123456
@Controller
public class MyController {
@RequestMapping("test1/{n}/{p}")
public String test1(@PathVariable("n") String name,@PathVariable("p") String pwd){
System.out.println(name);
System.out.println(pwd);
return null;
}
}
-
@RequestParam与@PathVariable的异同:
-
相同点:都是用来获取请求参数的;
-
不同点:
- @PathVariable主要用于接收http://host:port/path/{参数值}数据
- @RequestParam主要用于接收http://host:port/path?参数名=参数值数据
RestFul风格代码
- 用于接收不同请求的方法
- value :就是访问路径
- method :访问请求方式
@RequestMapping(value = "test2/{n}/{p}",method = RequestMethod.POST)
public String test2(@PathVariable("n") String name,@PathVariable("p") String pwd){
System.out.println(name);
System.out.println(pwd);
return null;
}
@RequestMapping(value = "test2",method = RequestMethod.GET)
public String test3(){
System.out.println("==========");
return null;
}
@RequestMapping(value = "test2/{id}",method = RequestMethod.PUT)
public String test4(@PathVariable("id") Integer id){
System.out.println(id);
return null;
}
@RequestMapping(value = "test2",method = RequestMethod.DELETE)
public String test5(@RequestParam("id") Integer id){
System.out.println(id);
return null;
}
- 发送请求
<form action="test2/张三/123" method="post">
<input type="submit" value="POST请求"/>
</form>
<br/><br/>
<form action="test2" method="get">
<input type="submit" value="GET请求"/>
</form>
<br><br>
<form action="test2/110" method="post">
<input type="hidden" name="_method" value="PUT"/>
<input type="submit" value="PUT请求">
</form>
<br/><br/>
<form action="test2?id=120" method="post">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="DELETE请求">
</form>
put和delete请求需要借助post请求来发送,并且在hidden类型的input中要带上一个令牌
_method=请求方式
- 在上面两步操作之后,还有一个极为重要的东西,需要在web.xml中配置一个过滤器,将post转化为PUT或者DELETE请求
<!-- 配置HiddenHttpMethodFilter:可以把POST请求转为DELETE或POST请求 -->
<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>
如何区分两个相同访问路径的请求
- 只要参数不同就可以了,使用
params
来区分参数
<form action="test2" method="get">
<input type="submit" value="GET请求"/>
</form>
<br><br>
<a href="test2?id=3">GET</a>
@RequestMapping(value = "test2",method = RequestMethod.GET)
public String test3(){
System.out.println("==========");
return null;
}
@RequestMapping(value = "test2",method = RequestMethod.GET,params = "id")
public String test6(Integer id){
System.out.println("查询2 id="+id);
return null;
}