目录
响应对象返回 String 给Browser & 中文乱码问题
本文章属于后端全套笔记的第三部分
HttpServletResponse是什么?
HttpServletResponse来自于Servlet规范中,是一个接口
其实现类由 HTTP服务器(Tomcat)提供
HttpServletResponse的实现类对象被称为响应对象
主要功能?
将doGet/doPost方法执行结果写入到【响应体】交给浏览器(即把执行结果以二进制形式写入到【响应体】)
设置响应头中[content-type]属性值,从而控制浏览器使用对应编译器将响应体二进制数据编译为【文字,图片,视频,命令】
设置响应头中【location】属性,将一个请求地址赋值给location,从而控制浏览器向指定服务器发送请求
语法
若输出的内容包含中文,则必须对resp对象使用setContentType进行内容类别的指定、编码规则。且需要注意:必须在获取PrintWriter对象前设置!
使用PrintWriter对象 out 进行输出
out的 write是按照字节输出,一般用于String。而对于int类型,则需要使用out的按字符输出的print方法。推荐使用print
- resp.setContentType("text/html;charset=utf-8"); //设置content-Type中的字符规则为UTF-8,以保证显示到网页为中文
- PrintWriter out = resp.getWriter(); //获取输出流
- out.write("从前台收到的参数值为" + strValue); //write方法,是字节输出流的方法(输出int的时候会按照ASCII码输出)
示例

- <form action="/web3/test1" method="post">
- <input type="text" name="p1">
- <input type="submit" value="测试响应对象返回String">
- form>

- public class TestResponse extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
- //接收测试参数
- req.setCharacterEncoding("utf-8"); //对POST请求体进行UTF-8编码
- String strValue = (String)req.getParameter("p1"); //获取参数值
-
- //测试返回String
- resp.setContentType("text/html;charset=utf-8"); //设置content-Type中的字符规则,以保证显示到网页为中文
- PrintWriter out = resp.getWriter();
- out.write("从前台收到的参数值为" + strValue);
- }
- }

- "1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
- version="4.0">
-
- <servlet>
- <servlet-name>testWeb1servlet-name>
- <servlet-class>TestResponseservlet-class>
- servlet>
- <servlet-mapping>
- <servlet-name>testWeb1servlet-name>
- <url-pattern>/test1url-pattern>
- servlet-mapping>
-
- web-app>

语法
out的 write是按照字节输出,一般用于String。而对于int类型,则需要使用out的按字符输出的print方法
在实际开发过程中,都是通过out.print()将真实的数据写入响应体的
示例
web.xml、index.jsp等配置,和上小节一模一样。
- public class TestResponse extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
- resp.setContentType("text/html;charset=utf-8"); //设置content-Type中的字符规则,以保证显示到网页为中文
- PrintWriter out = resp.getWriter();
-
- //测试返回 int
- out.write("测试返回int");
- out.write(50); //按字节输出,得到的是50的ASCII码对应的字符,输出的是2
- out.print(50); //按字符输出,得到的是原本的50
- }
- }
语法
如果输出语句内含有HTML标签,若直接输出,则由于在默认情况下,conten-type属性的值“text” content-type=“text”
此时采用的是【文本编译器】对响应体的二进制数据进行解析,无法将其解析为HTML命令而导致原封不动地把HTML标签输出了出来
若想让浏览器解析HTML标签后再显示出来,则可以使用 response.setContentType("text/html");
指定浏览器采用【编译器】对【响应体中的二进制内容】进行编译处理
这个语法在 响应对象输出不乱码中文 中也使用过
response.setContentType("text/html");
示例
- public class TestResponse extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
- //测试返回String
- resp.setContentType("text/html;charset=utf-8"); //设置content-Type中的字符规则,以保证显示到网页为中文、按HTML标签和text文本编译
-
- //测试输出编译好的HTML标签
- out.print("第一行");
- out.print("");
- out.print("第二行");
- }
- }