博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP和Servlet互相传输数据的过程中产生的乱码问题及解决方案(没有使用AJAX的情况)...
阅读量:5157 次
发布时间:2019-06-13

本文共 2081 字,大约阅读时间需要 6 分钟。

一. 服务器端接收到浏览器端传送的数据出现乱码的问题!!!(Servlet端获取数据时出现乱码)

  1. 为什么表单提交中文会出现乱码的问题?(非AJAX方式)

   浏览器端:当表单提交时,浏览器会对中文参数值进行编码,此时会使用打开表单所在的页面时使用的字符集进行编码(即:使用<%@ page contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%> 指定的字符集进行编码)

        服务器端:Servlet端默认情况下会使用 ISO-8859-1 进行解码。

   所以:浏览器端与服务器端的编码与解码方式不一致,并且 ISO-8859-1 本身并不支持中文的编码与解码,所以导致乱码的产生。

  2. 如何解决Servlet端的乱码问题?(建议使用方案二+方案三的结合体解决乱码的问题)

      第一种方案:将乱码后的字符串,按照 ISO-8859-1 的方式还原成 byte , 然后再将还原后的 byte 按照 UTF-8 的方式编码为字符串

        示例:byte[ ] bs=str.getBytes("ISO8859-1");

           str=new String(bs,"UTF-8");

             优点:get 和 post请求方式都适用  

        缺点:比较麻烦

     第二种方案:修改 tomcat 的配置文件 server.xml ,在 server.xml 的 Connector 标签中添加 uriEncoding 属性,并且设置 uriEncoding="utf-8"

        示例: <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" uriEncoding="utf-8"/>

        优点:简单

        缺点:只对 get 请求方式有效,对 post 请求方式无效      

     第三种方案:在获取请求参数前设置解码方式为 UTF-8

        示例:request.setCharacterEncoding("UTF-8");

        优点:简单

        缺点:只对 post 请求方式有效,对get请求方式无效

 

二. 浏览器端接收到服务器端传送的数据出现乱码的问题!!!(浏览器端获取数据时出现乱码)

  1. 为什么 Servlet 返回给浏览器的数据会出现乱码?

   Servlet默认情况下返回的JSP页面的编码方式为 ISO-8859-1 方式,浏览器端接收到的数据与服务器端一致也为 ISO-8859-1 方式,此时虽然服务器端的编码方式与浏览器端的解码方式一致,但是由于 ISO-8859-1 方式本身并不支持中文的编码与解码,所以导致了中文产生了乱码。

  2. 如何解决Servlet返回给浏览器的数据出现乱码的问题?

   在输出JSP页面之前添加页面编码方式为 UTF-8, 以此来通知servlet在输出JSP页面之前使用指定的字符集UTF-8进行编码(而不再使用默认的编码方式:ISO-8859-1),而且还会通知浏览器服务器端返回的数据类型和字符集,浏览器端会利用服务器端返回的字符集对数据进行相应的解码。

   示例:response.setContentType("text/html;charset=utf-8");

     注意:如果 Servlet 调用的是已经存在的 JSP页面,则还需要修改 JSP 页面的解码方式为 UTF-8

        示例:<%@ page contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%>

 

 

 

 

总之:如果 JSP 与 Servlet 之间传输中文数据出现乱码(不涉及使用 Ajax的情况),只需要检查四个地方就可以了:

(1) 浏览器端:

   <%@ page contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%>

(2) 服务器端:

   1) server.xml :<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" uriEncoding="utf-8"/>

      2) Java代码:request.setCharacterEncoding("UTF-8");

          response.setContentType("text/html;charset=utf-8"); 

转载于:https://www.cnblogs.com/nancyzhang/p/8095385.html

你可能感兴趣的文章
团队工作第二天
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
对Vue为什么不支持IE8的解释之一
查看>>
计算机改名导致数据库链接的诡异问题
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
查看>>
ObjectiveC基础教程(第2版)
查看>>
centos 引导盘
查看>>
Notes of Daily Scrum Meeting(12.8)
查看>>
Apriori算法
查看>>
onlevelwasloaded的调用时机
查看>>