目录
响应对象返回 String 给Browser & 中文乱码问题
本文章属于后端全套笔记的第三部分
| 响应对象 HttpServletResponse接口
HttpServletResponse的基本概述
HttpServletResponse是什么?
-
HttpServletResponse来自于Servlet规范中,是一个接口
-
其实现类由 HTTP服务器(Tomcat)提供
-
HttpServletResponse的实现类对象被称为响应对象
主要功能?
-
将doGet/doPost方法执行结果写入到【响应体】交给浏览器(即把执行结果以二进制形式写入到【响应体】)
-
设置响应头中[content-type]属性值,从而控制浏览器使用对应编译器将响应体二进制数据编译为【文字,图片,视频,命令】
-
设置响应头中【location】属性,将一个请求地址赋值给location,从而控制浏览器向指定服务器发送请求
响应对象返回 String 给Browser & 中文乱码问题
语法
-
若输出的内容包含中文,则必须对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);
}
}
<?xml version="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>testWeb1</servlet-name>
<servlet-class>TestResponse</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testWeb1</servlet-name>
<url-pattern>/test1</url-pattern>
</servlet-mapping>
</web-app>
响应对象返回 int 给Browser
语法
-
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标签后 返回给Browser
语法
-
如果输出语句内含有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("</br>");
out.print("第二行");
}
}