在如今做Java Web开发的时候, 大家经常会碰到那么一项任务, 就是去取那个HTTP请求里头的那个请求体数据这个东西。因为这个请求体的位置, 通常都会藏着客户端提交过来的各种数据, 比如说表单里面的内容, JSON格式的东西, 或者XML结构的数据之类的。
对于咱们用Java写代码的同学来说, 是可以借助一些对象来直接拿到这个请求体数据的。这篇文字接下来就要详细地给大家说说该怎么去操作了, 并且还会把相应的示例代码一并给到, 好让大家能看得更明白一点。
HTTP请求的请求体
HTTP 请求的请求体这部分内容, 它把客户端提交的那些数据给装起来了。这些数据, 通常会被做成不同的格式来进行编码。比方说, 表单数据、JSON, 还有 XML 这些形式, 都是常见的。
这个请求体的具体格式到底长啥样? 它是得看那个请求的内容类型来决定(在原文中这里出现了拼写错误为-Type)的。当然, 这个请求体里头, 也是可以塞进各种各样的数据的。
这就是一个 HTTP 请求里面, 那个请求体的例子。
POST /example/path HTTP/1.1Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 25
username=johndoe&password=secret
在这个示例里面, 请求体当中是包含了表单数据的, 这些数据是以x-www-form格式来进行编码处理的。
我们使用请求体数据的获取方式来对数据进行提取。
在Java Web应用里面, 是可以使用某种对象来获取HTTP请求里的请求体数据的, 因为这个对象包含了请求的所有信息, 这些个信息包括了请求行, 还有请求头啊, 以及请求体。
以下所呈现的内容, 便是利用对象这一方式, 来进行请求体数据的获取操作的一个具有参考性质的小型示例。
import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.BufferedReader;
public class RequestBodyInfoServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("
out.println("
Request Body Information
");
// 获取请求体数据
BufferedReader reader = request.getReader();
String line;
while ((line = reader.readLine()) !
= null) {
out.println("
" + line + "
"); } out.println(""); } }
在这个示例之中, 我们创建了一个对象, 这个对象能够处理HTTP POST请求。我们使用了该对象的特定方法, 用来获取请求体里面的内容数据, 随后将请求体里面的每一行数据进行逐行读取的操作, 并且把所读取到的数据一并显示在了响应信息里面。
获取请求体数据的其他方法
除了调用()方法之外, 大家还能使用别的方法来弄到手请求体里的数据, 具体是用哪个方法, 得看请求体的内容类型是什么样子。下面列举了一些经常会被用到的方法:
示例:使用获取JSON数据
下面是一个例子, 用来展示如何利用对象这个方式, 来获取JSON格式的请求里边的数据的具体的内容。
import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.BufferedReader;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonRequestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("
");
out.println("
JSON Request Data
");
// 获取请求体数据
BufferedReader reader = request.getReader();
StringBuilder jsonRequest = new StringBuilder();
String line;
while ((line = reader.readLine()) !
= null) {
jsonRequest.append(line);
}
// 解析JSON数据
ObjectMapper objectMapper = new ObjectMapper();
try {
// 将JSON数据解析为Java对象
MyData requestData = objectMapper.readValue(jsonRequest.toString(), MyData.class);
// 显示解析后的数据
out.println("
Name: " + requestData.getName() + "
"); out.println("
Age: " + requestData.getAge() + "
"); } catch (Exception e) { out.println("
Error parsing JSON data.
"); } out.println(""); } } class MyData { private String name; private int age; // 省略 getter 和 setter 方法 }
在此示例里呢, 我们创建了一个东西, 这个东西是用来去处理那些个HTTP的POST请求的, 然后我们是用了那个对象去拿到的那个JSON格式的请求体的数据, 往后呢是使用了这个库去把JSON数据给解析成了Java的对象, 并在响应里把解析好的数据给显示出来了。
结语
在处理Java Web开发的相关工作时, 大家经常会碰到一种情况,那就是需要去拿到HTTP请求里面的请求体数据这个问题。只要用上对象这样的方法, 工作人员就能够很方便地把请求体里面包含的数据给取出来,不管这些数据是表单形式的、Json格式的, 还是其它各种格式的数据都没关系。
期望通过看这篇文章, 那些刚刚开始学习相关技术的人都能够把怎么去获取Java环境下的HTTP请求里的请求体数据这个技能, 理解得更透彻一点, 也能在实际应用的时候发挥得更好一些。