SpringMVC

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;
    }
}

image-20210303224947658

  • @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;
}

不经风雨,怎见彩虹?
原文地址:https://www.cnblogs.com/MLYR/p/14487044.html