SpringMVC 基础2

217 阅读4分钟

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=1user/1 -> GET请求
保存操作saveUseruser -> POST请求
删除操作deleteUser?id=1user/1 -> DELETE请求
更新操作updateUseruser -> 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请求的条件:
  1. 当前请求的请求方式必须为 post
  2. 当前请求必须传输请求参数 _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

  • 组件扫描
  • 配置视图解析器
  • 配置视图控制器