SpringMVC
RESTFul
RESTFul是一种软件架构的风格。
RESTFul简介
REST: Representational State Transfer 表现层(视图和控制层)资源状态转移。
资源:
资源是一种看待服务器的方式,即将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅能代表服务器文件系统中的一个文件、数据库中的一张表等具体的东西,可以将资源设计的要多抽象有多抽象。与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。一个资源可以由一个或多个 URL来标识;URL既是资源的名称,也是资源在 WEB上的地址。对某个资源感兴趣的客户端应用,可以通过资源的 URL与其进行交互。
资源的表述(每个资源的格式不同):
资源的表述是一段对于资源在某个特定时刻的状态的描述。可以在客户端、服务器端之间转移(交换)。资源的表述可以有多种格式,如 HTML/XML/JSON/纯文本/图片/音视频等。资源的表述格式可以通过协商机制来确定。请求-响应方向的表述通常使用不同的格式。
状态转移:
在客户端和服务器端之间转移(transfer)代表资源(部署到服务器的内容)状态的表述。通过转移和操作资源的表述(请求路径),来间接实现操作资源的目的。
RESTFul的实现
具体说,就是 HTTP协议里面四个表示操作方式的动词:GET、POST、PUT、DELETE。 它们分别对应四种基本操作:GET获取资源、POST新建资源、PUT修改资源、DELETE删除资源。
REST风格提倡 URL地址使用统一的风格设计,从前到后各个单词使用斜杠分开,不适用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为 URL地址的一部分,以保证整体风格的一致性。
| 操作 | 传统方式 | REST方式 |
|---|---|---|
| 查询操作 | getUserById?id=1 | user/1 -> GET请求 |
| 保存操作 | saveUser | user -> POST请求 |
| 删除操作 | deleteUser?id=1 | user/1 -> DELETE请求 |
| 更新操作 | updateUser | user -> PUT请求 |
使用 get方式获取用户所有信息
@RequestMapping(value = "/users", method = RequestMethod.GET)
// @GetMapping("/users")
public String testGetAllUsers() {
System.out.println("查询所有用户信息");
return "test";
}
<a th:href="@{/users}">获取所有用户信息</a><br />
使用 get方式获取指定用户信息
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public String testGetUser() {
System.out.println("根据 id获取指定用户信息");
return "test";
}
<a th:href="@{/user/1}">根据 id获取用户信息</a><br />
使用 post方式添加用户信息
@RequestMapping(value = "/user", method = RequestMethod.POST)
public String testAddUser(String username, String password) {
System.out.println("添加用户信息: " + username + ", " + password);
return "test";
}
<form th:action="@{/user}" method="post">
用户名:<input name="username" /><br/>
密 码:<input name="password" /><br/>
<input type="submit" value="添加" />
</form>
使用 HiddenHttpMethodFilter处理 put、delete请求方式
SpringMVC提供了 HiddenHttpMethodFilter帮助我们将 post请求转换为 put、delete请求。
- HiddenHttpMethodFilter处理 put、delete请求的条件:
- 当前请求的请求方式必须为 post
- 当前请求必须传输请求参数 _method,参数值是真正的请求方式 满足以上条件,HiddenHttpMethodFilter过滤器就会将当前请求的请求方式转换为请求参数的 _method的值,因此请求参数 _method的值才是最终的请求方式。
- HiddenHttpMethodFilter在 web.xml中,必须注册在 CharacterEncodingFilter之后,因为其有一个获取请求方式的操作
- 在 web.xml中注册 HiddenHttpMethodFilter
<!--配置 HiddenHttpMethodFilter-->
<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>
处理 put请求方式:
@RequestMapping(value = "/user", method = RequestMethod.PUT)
public String updateUser(String username, String password) {
System.out.println("修改用户信息:" + username + ", " + password);
return "test";
}
<form th:action="@{/user}" method="post">
<!--添加隐藏域,用于传输真正的请求方式 method-->
<input type="hidden" name="_method" value="put" />
用户名:<input name="username" /><br/>
密 码:<input name="password" /><br/>
<input type="submit" value="修改" />
</form>
pom.xml、web.xml、springMVC.xml配置文件的作用
pom.xml(Project Object Model 项目对象模型)
该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等。
例如:
- springframework
- logback
- thymeleaf
- servlet
事实上,在Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。
web.xml
描述 Java Web应用的 XML文件,它定义了 Web应用中的各个组件(Servlet, Filter等)以及部署信息。
例如:test
- CharacterEncodingFilter
- HiddenHttpMethodFilter
- DispatcherServlet
springMVC.xml
- 组件扫描
- 配置视图解析器
- 配置视图控制器