首页 > 代码库 > Response

Response

Response对象代表响应

 

响应由三部分组成:

  1. 响应行(状态码)
  2. 响应头
  3. 响应数据

相关方法:

      getStatus

      setHeader

      getWrite和getOutputStream

 

其中写数据可以分为两种方式

  • 字节流  可以写任何格式的数据 
  • 字符流  只能写字符数据

 

如何向客户端浏览器输出中文

这里面讲一讲编码和乱码形成的问题

public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        String dataString = "中国";        OutputStream outputStream  = response.getOutputStream();        //要以字节流输出,所以要先把汉字转化为字节        outputStream.write(dataString.getBytes());    }

 

这种方式在浏览器上是没有问题的

 

但是在实际开发中,为了全球通用,一般是使用UTF-8

但是如果指定传输字节格式

public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        String dataString = "中国";        OutputStream outputStream  = response.getOutputStream();        //指定汉字传输格式        outputStream.write(dataString.getBytes("UTF-8"));    }

那么在浏览器上就会出现乱码(即是其他的字)

原因:

  • 当把汉字定义成UTF-8时,传输的并不是汉字,而是其中对应的编码,即是数字。
  • 当把数字传给浏览器时,浏览器要进行解码,但是浏览器默认的解码方式是国标gb2312

所以会解析成其他的字

servlet写给浏览器的不是汉字中国,而是它所对应的编码

计算机通讯是没有汉字通讯的,只有数字通讯

解决:

  • 在浏览器设置里面改动编码方式
  • 在服务器代码里设定浏览器的解码方式
public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        //加入响应头        response.setHeader("Content-type", "text/html;charset=UTF-8");        String dataString = "中国";        OutputStream outputStream  = response.getOutputStream();                outputStream.write(dataString.getBytes("UTF-8"));    }

这样的话就没有问题了。

 

Response