HttpServletResponse
简单说明
HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个 Response 对象传 递给 Servlet 程序去使用。
HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息, 我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse 对象来进行设置
两个输出流的简要说明
类型 | 用法 | 解释 |
---|---|---|
字节流 | getOutputStream(); | 常用于下载(传递二进制数据) |
字符流 | getWriter(); | 常用于回传字符串(常用) |
重要说明:
- 两个流同时只能使用一个,否则就会报错;
给客户端回传字符串数据
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();
//下面两种都可以
writer.print("response1");
writer.write("response2");
}
中文乱码
问题描述
writer.print("我是中文");
解决方法
解决方法一
JavaWeb默认字符集为ISO-8859-1
,不支持中文,所以我们需要自己设置
response.setCharacterEncoding("UTF-8");
此时暴露了新问题乱码
为什么呢?因为我们刚刚设置的是服务器的字符集为UTF-8
,但此时客户端的字符集与服务端不同,造成编码格式不匹配,简单来说就是客户端浏览器编码格式不匹配服务端,因此可以通过设置响应头解决,再加上response.setHeader("Content-Type", "text/html; charset=UTF-8");
即可,这样浏览器便知道了你的编码格式
完整代码如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader("Content-Type", "text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
writer.print("我是中文");
}
解决方法二(推荐)
推荐第二种,它会同时设置服务器和客户端都使用 UTF-8 字符集,还设置了响应头
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.print("我是中文");
}