SpringMVC学习之RESTful风格post

RESTful不是一种技术,而是一种风格。下面这个是百度百科对这种风格的解释:

     一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

我们来比较一下REST和非REST的区别,本文和上一篇的有很大的关联,可以先看上一篇文章把配置文件弄好和体验一下SpringMVC的好处。

这是我上一篇文章的路径:http://blog.csdn.net/qq_18895659/article/details/51824624

我们这篇和上一篇所有的配置文件一样都没有变。

好,我们继续回归本文

----非REST的url:

                 http://...../queryItems.action?id=001&type=T01

----REST的url风格:
                    http://..../items/001/T01

注意 @PathVariable 将 @RequestMapping 中value带的变量 此处是 {id}与方法中参数绑定 

注意:如果变量名称与方法参数名称不一致,则需要指定

REST缺点 : 跳转的时候浏览器不认post/get 之外的访问方法 ,而此处是DELETE

我们下面写一个例子来看一下当使用POST和使用DELETE时候的区别。配置文件和上篇的配置文件相同,这里就不贴出来了。

我们来看我的action类

@Controller  
@RequestMapping("/person")//注解为控制器指定可以处理哪些 URL 请求,跟struts2中的命名空间作用一样  
public class PersonAction{  
      
    /** 
     * 使用@RequestParam注解指定参数的name 
     * 注解指定参数名称 
     */  
       @RequestMapping(value="/delete/{id}/{name}",method=RequestMethod.DELETE)
    public String delete(@PathVariable Integer id,@PathVariable("name") String username){
        System.out.println(id + "   " + username) ;
        return "person";
    }

      
}  
关于其中的一些参数这里也不再做解释了。

下面这是我的一个DELETE测试jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>   
    <title>My JSP 'test.jsp' starting page</title> 
  </head>
  
  <body>
   RESTful 风格 post
    <form action="${pageContext.request.contextPath}/person/delete/1/haha" method="post">
    	<input type="hidden" name="_method" value="DELETE">
    	<input type="submit" value="测试 delete">
	</form>
  </body>
</html>


action="${pageContext.request.contextPath}/person/delete/1/haha"
我们可以看到url已经有变化了。我们可以从action里面找出端倪


  @RequestMapping(value="/delete/{id}/{name}",method=RequestMethod.DELETE)
而这种风格缺点也是跳转的时候浏览器不认post/get 之外的访问方法 ,而此处是DELETE,所以在点击测试delete按钮测试时页面转发会出现错误

但我们的值却可以传过去。可以看到我们页面的值成功传到后台了。

那我们用post方法呢,我们可以在上面的action类里面添加如下的方法。

    @RequestMapping(value="/method1",method=RequestMethod.POST)
    public String method1(Integer id,String name){
        System.out.println(id + "  ---    "+name);
        return "person";
    }     
我们把jsp改为如下

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>   
    <title>My JSP 'test.jsp' starting page</title>  
  </head>  
  <body>
   RESTful 风格 post
    <form action="http://localhost:8080/${pageContext.request.contextPath}/person//method1" method="post">
    	<input type="hidden" name="_method" value="POST">
    	<input type="text" name="id">
    	<input type="text" name="name">
    	<input type="submit" value="测试 POST">
	</form>
  </body>
</html>

注意修改这个隐参

<input type="hidden" name="_method" value="POST">

我们可以来测试一下和DELETE有何不同。

由上面可以看到,转发成功了,传值也成功了。

通过上例可以发现,使用@RequestMapping(value="",.ethod=RequestMethod.POST)可以限制接收提交的方式,有利于规范代码。

好了,这就是springMVC的RESTful风格的使用,如有哪里错误,请大神指出。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章