简介

RESTful风格(Representational State Transfer),又叫表现层状态转移,是一种开发理念,也是对HTTP协议很好的诠释

主要理念是将互联网中的网页、数据、服务都视作资源,每次请求只是使得资源的状态发生变化

具体来说,使用规范化的URL来定位网络中的资源,使用HTTP请求的四种请求方式使得资源的状态发生改变

如:GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源

RESTful规范

1、对URL进行规范,写RESTful格式的URL

非REST的URL:http://..../queryItems.action?id=001

REST的URL风格:http://..../items/001

特点:URL简洁,将参数通过URL传到服务端,请求URL只是对资源的定位,因此不应该出现动词

2、http的方法规范

不管是删除、添加、更新,使用的URL是一致的,如果进行删除,需设置HTTP的方法为delete,其它同理

后台controller方法:判断http方法,如果是delete则执行删除,如果是post则执行添加

3、对http的contentType规范

请求时执行contentType,要json数据,则设置成json格式的type

而实际使用中第2点往往没有做到

springMVC对RESTful的支持

springmvc中使用URL模板映射支持URL规范

测试代码

    //通过URL中的{XXX}表示占位符,与@PathVariable(XXX)配合建立URL路径到参数的绑定关系
@RequestMapping("/user/{id}/{otherParam}")
@ResponseBody
public User queryUser(@PathVariable("id") String id) {
User user = new User();
if("123".equals(id)) {
user.setUsername("nlskyfree");
}
return user;
}

JSP页面

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 4.01 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<body>
<h2>Hello World!</h2>
用户名:${user.username}
</body>
</html>

修改web.xml映射方式

<servlet-mapping>
<!--
常用两种配置方式
第一种:*.action,访问以.action结尾的,由DispatcherServlet解析
第二种:/,所有访问的地址都由DispacherServlet进行解析,对于静态文件的解析需要配置不让DispacherServlet进行解析,
使用此种方式可以实现RESTful风格的url
-->
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

配置springmvc对静态资源的访问

注意以下标签需配合mvc:annotation-driven</mvc:annotation-driven>使用

    <!-- 静态资源管理 -->
<!-- 注意到mapping的值"/resources/**"有两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)
,如果只有一个*,将只能映射1级路径,即只能访问1,访问2、3将会报错。 -->
<mvc:resources location="/jsp" mapping="/jsp/**"/>
<mvc:resources location="/js" mapping="/js/**"/>

结果:

最新文章

  1. java转换 HTML字符实体,java特殊字符转义字符串
  2. Python学习--Python基础语法
  3. 注解:Hibernate双向N-&gt;N关联(两端都控制关联关系)
  4. linux命令行netstat总结
  5. 从malloc中窥探Linux内存分配策略
  6. Javascript水平提升
  7. 批处理备份和恢复mysql数据库
  8. 网络编程easy错误点-手知道
  9. 分布式一致性算法Raft
  10. An Introduction to Variational Methods (5.1)
  11. Ubuntu下利用Apache转发模块实现反向代理
  12. fastboot烧写hi3531
  13. React demo:express、react-redux、react-router、react-roter-redux、redux-thunk(一)
  14. git pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
  15. js中函数对象创建的总结
  16. Qt5 json 数据处理
  17. Python之函数&amp;参数&amp;参数解构
  18. C++定义自己的异常
  19. Maven 入门——Maven 的安装和配置
  20. SQL Server复制入门(二)----复制的几种模式

热门文章

  1. 开源项目推荐 - 巨鲸任务调度平台(Spark、Flink)
  2. springboot整合邮件发送(163邮箱发送为例)
  3. Vue + Element 实现多选框选项上限提示与限定
  4. Django学习路35_视图使用方法(复制的代码) + 简单总结
  5. PHP libxml_clear_errors() 函数
  6. PHP mysqli_select_db() 函数
  7. 牛客练习赛63 牛牛的树行棋 差分 树上博弈 sg函数
  8. js 读取word和txt(react版) + 正则分割段落
  9. [转]Post和Get的区别
  10. 【CSP2019】括号树 题解(递推+链表)