87457215 2017-08-13
前言:简述现在互联网流行的RestFul风格,并通过实现一个增删改查用例实例demo,以展现SpringMVC对RestFul风格的支持。
本篇文章重点关注以下问题:
REST:即 Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。
下面对几个关键词做简要阐述:
比如:
示例: /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
通常的浏览器一般只支持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/>
前台代码可以参考附件,这里只看后台实现:
@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。
前台代码可以参考附件,这里只看后台实现:
@RequestMapping(value="/user", method=RequestMethod.GET) public String toAddUser(){ System.out.println("【toAddUser】"); return "addUser"; }
@RequestMappingq注解的value属性指明URL,method属性指明请求方式为GET。
前台代码可以参考附件,这里只看后台实现:
@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。
<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请求;后台代码如下: