服务器端HttpServletResponse对象编码发送信息及浏览器端解码显示信息原理剖析

来源:互联网 发布:网络用词pa是什么意思 编辑:程序博客网 时间:2024/06/06 05:47

服务器端HttpServletResponse对象对信息编码向浏览器端发送数据及浏览器端解码显示信息原理剖析

第一点:首先要明白,服务器端是把要发送的信息进行编码为对应为字节流,发送给浏览器。浏览器再对接收到的字节流信息进行解码显示。

一:原理过程分析  

  <1>服务器端:首先服务器端要把信息转换成成字节流.
   (1.1)若你指定编码格式,服务器端使用你指定的编码格式进行编码转换成字节流。
   (1.2)若你没有指定编码格式,服务器端会使用它的默认编码格式 ISO-8859-1 转换成字节流。
   接着服务器端把转换好的字节流发送给浏览器。
   <2>浏览器端: 再接着就是浏览器的工作了,浏览器拿到这些字节流,要进行解码显示。
   浏览器首先会从(2.1)响应头,或(2.2)响应体中进行查找,看是否可以找到指定的编码进行解码显示。
   若找到,则按照服务器端发过来的响应信息中指定的编码进行解码显示。
   若找不到,则按照浏览器端,(2.3)自己默认的编码格式进行解码显示。


二:  解决方法   

<1>服务器端的编码:服务器端如何手动指定编码格式

 两种方式设置服务器编码字符数据的编码方式
 1 response.setContentType("text/html;charset=utf-8");(推荐使用!)
 2 response.setCharacterEncoding("utf-8");
  
 <2> 浏览器端的解码: 发送之前你需要设置响应体的mime类型 , 如何设置 ?
(即浏览器要找的解码格式。)两种设置方法。
1 设置在响应头中 response.setContentType("text/html;charset=utf-8");(推荐使用!)
2 在响应体中设置 //String s =
// "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">  中文信息 ";

  

 

三:推荐方法   

  response.setContentType("text/html;charset=utf-8");
  //设置mime类型,同时设置数据的编码方式,对服务器和客户端都有效!
  
  响应体数据要使用流的形式进行发送   
  两种流的形式:
  1 字节流 OutputStream out = response.getOutputStream();(任意类型。)
  2 字符流 PrintWriter writer = response.getWriter();(一般的字符)


四:代码简单演示

import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServeAndClientEecodeAndDncodeServlet extends HttpServlet{public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{response.setContentType("text/html;charset=utf-8");// 设置mime类型,同时设置数据的编码方式,对服务器和客户端都有效!// 响应要使用流的形式发送// 1 使用字节流形式发送// response.getOutputStream().write("使用字节流的形式发送!".getBytes("utf-8"));//字节流,字符串转换为字节流,是要指定编码的。// 2 使用字符流形式发送response.getWriter().write("使用字符流的形式发送!");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{doGet(request, response);}}



   
1 0