04-restful、Spring MVC过滤器

REST


1、简单介绍

REST:即 Representational State Transfer,(资源)表现层状态转化。是目前最流行的一种互联网软件架构,它结构清晰、符合标准、易于理解、扩展方便,正得到越来越多的网站的使用。

它是面向资源的,而资源通过URI进行暴露
 URI 的设计只要负责把资源通过合理方式暴露出来就可以了。对资源的操作与它无关,操作是通过 HTTP动词来体现,所以REST 通过 URI 暴露资源时,会强调不要在 URI 中出现动词。

2、REST中四种表示操作方式的动词

GET 用来获取资源
POST 用来新建资源(也可以用于更新资源),
PUT 用来更新资源,
DELETE 用来删除资源

3、URI示例

  • /orders HTTP/GET  (列表页)
  • /order/1 HTTP GET:得到id=1的order  (回显页)
  • /order/1 HTTP DELETE:删除id=1的order  (执行删除)
  • /order/1 HTTP PUT:更新id=1的order  (执行更新)
  • /order HTTP POST:新增oder  (执行插入)
  • /order HTTP GET:新增order的表单页面  (打开新增页面)

4、Spring MVC过滤器

 HiddenHttpMethodFilter:浏览器的form表单只支持GET和POST请求,不支持PUT、DELETE请求。spring添加了一个过滤器,可以将这些请求转换为标准的http方法,支持POST、GET、DELETE和PUT请求。

HiddenHttpMethodFilter必须作用于dispatcher前,所以需要在web.xml配置文件中设置

<filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
      <!--
        /* 所有的请求都过滤
        /  除了.jsp文件不过滤,其他都过滤
        -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

注意:doFilterInternal方法只对method为post的表单进行过滤,所以在页面中必须进行如下设置:

<form action="..." method="post">
        <input type="hidden" name="_method" value="put" />
        ......
</form>

其中,name属性的值必须为_method,才能生效。

4、创建restful应用程序示例

1)配置过滤器(web.xml页面中)

<filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
      <!--
        /* 所有的请求都过滤
        /  除了.jsp文件不过滤,其他都过滤
        -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2)实现delete提交
controller层:

@Controller
@RequestMapping("/user")
public class RestController {
    @RequestMapping("/restForm")
    public String restForm(){
        return "restful";
    }

    /*rest风格的delete请求的发送*/
    @RequestMapping("/delete/{id}")
    public String deleteTest(@PathVariable("id") Integer id){
        System.out.println("id:"+id);
        System.out.println("delete……");
        return "redirect:/user/restForm";
    }
}

jsp页面:

<form action="delete/2" method="post" id="deleteForm">
    <input type="hidden" name="_method" value="delete">
</form>
<a href="javascript:void(0)" onclick="deleteFun()">delete请求</a>
<script>
    function deleteFun() {
        document.getElementById("deleteForm").submit();
    }
</script>

3)实现put提交

controller层:

@Controller
@RequestMapping("/user")
public class RestController {
    @RequestMapping("/restForm")
    public String restForm(){
        return "restful";
    }

    /*rest风格的delete请求的发送*/
    @RequestMapping("/delete/{id}")
    public String deleteTest(@PathVariable("id") Integer id){
        System.out.println("id:"+id);
        System.out.println("delete……");
        return "redirect:/user/restForm";
    }
}

jsp页面:

<form action="put/1" method="post" id="myForm">
    <input type="hidden" name="_method" value="put">
</form>

<a href="javascript:void(0)" onclick="updateFun()">put请求</a>
<script>
    function updateFun() {
        document.getElementById("myForm").submit();
    }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值