Response响应字符,字节数据
Response响应字符数据:
就是以纯文本数据作为响应体进行响应
- 通过Response对象获取字符输出流
- 我们会获得一个字符打印流对象
PrintWriter writer = resp.getWriter();
- 写数据
writer.write("aaa");
- 我们响应的数据不仅仅可以是文本数据, 还可以是html内容
- eg:
writer.write("<h1>aaa</h1>");
- 但是我们可以发现我们如果直接使用write()方法写出html内容的时候浏览器并不会将我们写出的内容以html格式进行解析, 而是还是以文本的形式来解析, 这个时候我们的浏览器中得到的响应数据就是"< h1>aaa< /h1>", 就是字符类型的一串这样的数据, 而不是将我们的数据解析为了一个一级标题
- 如果我们是按照html内容的格式进行解析的时候html文档流中就应该会有一个一级标题, 标题的内容就是:aaa
- 那么我们如何让浏览器知道我们的响应数据是html内容?,也就是如何让浏览器会去使用html的格式去对我们响应回来的数据进行一个解析?
- 我们要设置一个响应头, 有一个响应头名为: content-type, 这个响应头对应的值就是告诉客户端浏览器我们是以何种格式进行的数据响应, 我们要将content-type响应头的值设置为: “text/html”, 这样我们的浏览器就会知道响应的数据html内容, 浏览器就会使用html格式进行一个解析对应的数据
- text/html是mime类型的一种, 就是表示是文本类型中的超文本类型
* 那么我们如何将content-type响应头设置为"text/html"?
1. response.setHeader("content-type","text/html")
* 这种方式我们之前就讲过, 就是设置响应头的通用方法, 但是这种方式之下只是设置了响应的数据类型为html, 这个时候就会有新的问题出现:
- 会出现中文乱码的问题:
* 之前我们就说过, 使用POST方式传输中文数据的时候会出现中文乱码问题, 并且这个问题一直没有得到解决 ,(虽然GET方式请求之前也是会出现中文乱码的问题, 但是Tomcat在8.0版本之后就将解析URL的字符集从ISO-8859-1修改为了UTF-8, 所以也就是在Tomcat8.0版本之后GET方式中文乱码问题已经是被解决了) , 我们不管是请求的时候使用流传输请求数据的时候或者是使用流传输响应数据的时候, 流中解析数据使用的编码都是ISO-8859-1, 所以POST方式的中文乱码问题一直是没有解决的
- 但是POST方式的中文乱码问题是非常好解决的, 我们只要设置对应的输入和输出流的编码方式为UTF-8方式即可, 因为作为传输POST请求数据的时候我们使用的是输入流, 输入流的编码是ISO-8859-1, 而我们在前端编程中默认都是使用的UTF-8编码, 所以我们向后端发送请求的时候对应的作为响应数据的内容肯定也就是使用的UTF-8编码集进行的编码, 但是我们在Java中获取请求数据的时候使用的却是ISO-8859-1编码, 所以就会出现中文乱码问题, 同样的, 因为POST方式响应数据的时候我们使用的也是UTF-8编码,因为Java中的默认字符编码集就是UTF-8, 但是我们使用输出流将我们的对应数据写出到Response对象中的请求体中的时候就会出现中文乱码问题, 所以就是我们只要是使用POST方式来传输数据的时候, 不管是我们获取请求数据, 还是响应数据的时候,我们都一定要修改流的编码, 修改为UTF-8的形式,以免发生中文乱码问题
- 所以我们就提出了一种新的方法, 既可以设置响应数据的类型, 又可以设置对应的输出流编码(如下:)
- response.setContentType(“text/html;charset=utf-8”)
- 注意: 这个方法中的text/html和charset=utf-8之间是使用的封号(;)作为分隔符
- 这里其实就是说明我们的响应内容是使用的utf-8编码, 那么这个对应的我们只要使用输出流写出数据的时候都会是使用utf-8编码来解析对应要写出的数据
- 这个其实和我们的POST请求方式之下的中文乱码问题是相似的, 我们的POST请求方式的中文乱码我们也是通过设置字符的编码集来修改输入流解析数据的时候使用的字符集,是使用request.setCharacterEncoding()方法设置的编码字符集