MyException - 我的异常网
当前位置:我的异常网» VC/MFC » SpringMVC(8)_SpringMVC对RESTful的支持(实现增删改

SpringMVC(8)_SpringMVC对RESTful的支持(实现增删改查)

www.MyException.Cn  网友分享于:2013-08-22  浏览:0次
SpringMVC(八)_SpringMVC对RESTful的支持(实现增删改查)

       前言:简述现在互联网流行的RestFul风格,并通过实现一个增删改查用例实例demo,以展现SpringMVC对RestFul风格的支持。

本篇文章重点关注以下问题:

  • 简述Rest风格
  • SpringMVC对Rest的支持

1. 简述Rest风格

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

       下面对几个关键词做简要阐述:

  • 资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的 URI 。要获取这个资源,访问它的URI就可以,因此 URI 即为每一个资源的独一无二的识别符。
  • 表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层(Representation)。比如,文本可以用 txt 格式表现,也可以用 HTML 格式、XML 格式、JSON 格式表现,甚至可以采用二进制格式。
  • 状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。HTTP协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是 “表现层状态转化”。具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源

        比如:

 

示例: 
/order/1 HTTP GET :得到 id = 1 的 order
/order/1 HTTP DELETE:删除 id = 1的 order
/order/1 HTTP PUT:更新id = 1的 order
/order HTTP POST:新增 order

 

2. SpringMVC对Rest的支持

         通常的浏览器一般只支持GET、POST请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器(HiddenHttpMethodFilter),可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与DELETE 请求。

        在web.xml中配置此过滤器:

<!-- 配置 org.springframework.web.filter.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>
SpringMVC 处理静态资源:
1. 为什么会有这样的问题:
	优雅的 REST 风格的资源URL 不希望带 .html 或 .do 等后缀
	若将 DispatcherServlet 请求映射配置为 /, 
	则 Spring MVC 将捕获 WEB 容器的所有请求, 包括静态资源的请求, SpringMVC 会将他们当成一个普通请求处理, 
	因找不到对应处理器将导致错误。
2. 解决: 在 SpringMVC 的配置文件中配置 <mvc:default-servlet-handler/>

 

3. 显示所有用户信息

  • URL:users
  • 请求方式:GET
  • 显示效果如下:


        前台代码可以参考附件,这里只看后台实现:

@RequestMapping(value="/users", method=RequestMethod.GET)
public String getAllUser(Map<String, Object> map){
    System.out.println("【getAllUser】");
    map.put("userList", userService.getAllUser());
    return "list";
}

         @RequestMappingq注解的value属性指明URL,method属性指明请求方式为GET。

 

4.添加用户信息

4.1显示添加页面
  • URL:user
  • 请求方式:GET
  • 显示效果如下:


 
          前台代码可以参考附件,这里只看后台实现:

@RequestMapping(value="/user", method=RequestMethod.GET)
public String toAddUser(){
    System.out.println("【toAddUser】");
    return "addUser";
}

        @RequestMappingq注解的value属性指明URL,method属性指明请求方式为GET。

4.2添加用户信息
  • URL:user
  • 请求方式:POST
  • 显示效果如下(完成添加,重定向到 list 页):

         前台代码可以参考附件,这里只看后台实现:

@RequestMapping(value="/user", method=RequestMethod.POST)
public String addUser(User user){
    System.out.println("【AddUser】" + user);
    userService.addUser(user);
    return "redirect:/users";
}

         @RequestMappingq注解的value属性指明URL,method属性指明请求方式为POST。


 5. 删除用户信息

  • URL:user/{id}
  • 请求方式:DELETE
  • 显示效果:对应记录从数据表中删除,重定向到 list 页
         DELETE请求方式一般浏览器不支持,此处贴上前台代码,展示SpringMVC如何构造DELETE请求,前台代码如下:
<form action="" method="POST">
	<input type="hidden" name="_method" value="DELETE"/>
</form>

<a class="delete" href="user/${user.id}">删除</a>

<script type="text/javascript">
	$(function(){
		$(".delete").click(function(){
			var href = $(this).attr("href");
			$("form").attr("action", href).submit();			
			return false;
		});
	})
</script>
         form表单中input隐藏域name为“_method”,value为“DELETE”,SpringMVC便将此请求认为DELETE请求;后台代码如下:
@RequestMapping(value="/user/{id}", method=RequestMethod.DELETE)
public String delUser(@PathVariable("id") String id){
    System.out.println("【DelUser】id = " + id);
    userService.delUser(id);
    return "redirect:/users";
}
         @RequestMappingq注解的value属性指明URL,method属性指明请求方式为DELETE

 

6.修改用户信息

6.1 显示修改页面
  • URL:user/{id}
  • 请求方式:GET
  • 显示效果:

       前台为GET请求,没什么特殊的,就不上代码了,这次只给出后台代码:

@RequestMapping(value="user/{id}", method=RequestMethod.GET)
public String toUpdateUser(@PathVariable("id") String id, Map<String, Object> map) {
    System.out.println("【toUpdateUser】id = " + id);
    map.put("user", userService.getUser(id));
    return "editUser";
}

 @RequestMappingq注解的value属性指明URL,method属性指明请求方式为GET,@PathVariable注解提取待编辑用户的Id,用于查询用户信息。

6.2修改用户信息

  • URL:user
  • 请求方式:PUT
  • 显示效果:完成修改,重定向到list页面

       先看前台代码,SpringMVC如何实现PUT请求:

<form action="${pageContext.request.contextPath}/user" name="userForm" method="post">
	<input type="hidden" name="_method" value="PUT"/>
	<input type="hidden" name="id" value="${user.id}">
	姓名:<input type="text" name="userName" value="${user.userName}">
	年龄:<input type="text" name="age" value="${user.age}">
	<input type="submit" value="编辑" >
</form>

       form表单中input隐藏域name为“_method”,value为“PUT”,SpringMVC便将此请求认为PUT请求;后台代码如下:

 

@RequestMapping(value="/user", method=RequestMethod.PUT)
public String updateUser(User user){
    System.out.println("【UpdateUser】" + user);
    userService.updateUser(user);
    return "redirect:/users";
}

 

代码链接:http://pan.baidu.com/s/1dFs3dQx 密码:e4nf

文章评论

Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
 程序员的样子
程序员的样子
程序员都该阅读的书
程序员都该阅读的书
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
编程语言是女人
编程语言是女人
旅行,写作,编程
旅行,写作,编程
鲜为人知的编程真相
鲜为人知的编程真相
那些争议最大的编程观点
那些争议最大的编程观点
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
漫画:程序员的工作
漫画:程序员的工作
中美印日四国程序员比较
中美印日四国程序员比较
一个程序员的时间管理
一个程序员的时间管理
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
如何成为一名黑客
如何成为一名黑客
代码女神横空出世
代码女神横空出世
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员应该关注的一些事儿
程序员应该关注的一些事儿
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
总结2014中国互联网十大段子
总结2014中国互联网十大段子
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
我是如何打败拖延症的
我是如何打败拖延症的
10个调试和排错的小建议
10个调试和排错的小建议
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
每天工作4小时的程序员
每天工作4小时的程序员
老程序员的下场
老程序员的下场
我的丈夫是个程序员
我的丈夫是个程序员
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
Java程序员必看电影
Java程序员必看电影
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有