使用SpringMVC框架时,使用delete访问报JSPs only permit GET POST or HEAD

由于浏览器form表单只支持GET和POST请求方式,而DELETE、PUT的请求方式并不支持,不过SPring3.0后添加了一个过滤器HiddenHttpMethodFilter,可以将浏览器请求修改为指定的请求方式,发送给控制器,使得请求方式可以支持DELETE和PUT两种请求方式。

具体实现步骤如下:

1、在web.xml中配置过滤器

2、form表单的请求方式必须是post请求

3、在form表单中提供<input type="hidden" name="_method" value="请求方式"/>,并按照要求提供_method请求参数,该参数就是我们需要的请求方式

先看下HiddenHttpMethodFilter的源码:

1、在web.xml中配置过滤器,一定要配置<servlet-name>

  <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>
     <servlet-name>mcpMvc</servlet-name>
 </filter-mapping>

2、编写相应的jsp页面:

          < !-- 保存 -->
          <form action="springmvc/testRequestPost" method="post">
              用户名称:<input  type="text" name="username" /><br/>
              <input type="hidden" name="_method" value="POST"><br/>
              <input type="submit" value="保存"/>
          </form>
          <hr/>
          <!-- 删除 -->
          <form action="springmvc/testRequestDelete/1" method="post">
              <input type="hidden" name="_method" value="DELETE"/><br/>
              <input type="submit" value="删除"/> 
          </form>
          <hr/>
          <!-- 更新 -->
          <form action="springmvc/testRequestPut/1" method="post">
              用户名称:<input  type="text" name="username" /><br/>
              <input type="hidden" name="_method" value="PUT"/><br/>
              <input type="submit" value="更新"/>
          </form>
          <hr/>
          <!-- 获取 -->
          <form action="springmvc/testRequestGet/1" method="post">
              <input type="hidden" name="_method" value="GET"/><br/>
              <input type="submit" value="获取"/>
          </form>

3、Controller类,需要注意的是在使用DELETE及PUT请求是,要添加@RequestBody注解

@Controller   
@RequestMapping("/springmvc")
public class SprinvmvcAnnotationTest {
        /**
         * 分别使用http请求中的get  put  post  delete请求方式来交互
         */
        @RequestMapping(value="/testRequestPost",method=RequestMethod.POST)
        public String testPost(User1 user){
            System.out.println("rest post "+user);
            return "success";
        }
        
        @RequestMapping(value="/testRequestDelete/{id}",method=RequestMethod.DELETE)
        @ResponseBody
        public String testDelete(@PathVariable(value="id",required=true)Integer id){
            System.out.println("rest delete "+id);
            return "success";
        }
        
        @RequestMapping(value="/testRequestPut/{id}",method=RequestMethod.PUT)
        @ResponseBody
        public String testPut(@PathVariable(value="id",required=true)Integer id,User1 user){
            System.out.println("rest put "+id+" "+user);
            return "success";
        }
        
        @RequestMapping(value="/testRequestGet/{id}",method=RequestMethod.GET)
        public String testGet(@PathVariable(value="id",required=true)Integer id){
            System.out.println("rest get "+id);
            return "success";
        }
}

最后在浏览器中输入相应的值,得到的结果如下所示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值