JavaWeb学习-Servlet系列-13-HttpServletResponse字节流输出

前面一篇,我们介绍了编码设置,还有一个方法PrintWriter,这个对象就是一个字符流操作,直接把内容通过字符流方式写入到response对象,在响应正文的操作中,还有一个叫字节流的对象ServletOutputStream, 其实就是继承了OutputStream类。

1.默认编码字节流方式

package com.anthony.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDemo2 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		ServletOutputStream sos = response.getOutputStream();
		sos.write("你好abc".getBytes());
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

重新部署到tomcat服务器上,测试下

这里有一个思考,为什么这里没有显示问号或者乱码。这里我们来复习下String类的getByte()方法,打开JDK API,查询String类。

不带参数的getBytes(), 人家说了使用平台默认的字符集编码,这个默认是什么意思,我的win10系统是简体中文操作系统,默认字符集编码方式是GBK,而且我浏览器默认也是中文GBK,所以这里能正常解析,不会产生问号和乱码。

2.指定编码字节流方式

注意到上面还有一个代码字符集编码的getBytes方法,我们这里来测试一下。

package com.anthony.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDemo2 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		ServletOutputStream sos = response.getOutputStream();
		sos.write("你好abc".getBytes("UTF-8"));
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

重新部署,网页能正常解析字节流数据。

我们代码中,字节流的编码格式设置为UTF-8,而且通过setContentType()把浏览器和服务器都告诉使用UTF-8编码去解析,这样就不会冲突,可以正常显示,如果你把一方改成GBK,那么页面出来就会乱码显示。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值