设为首页 收藏本站
查看: 506|回复: 0

[经验分享] Web项目 Jsp+Tomcat+Mysql乱码解决终极篇

[复制链接]

尚未签到

发表于 2016-10-17 06:15:35 | 显示全部楼层 |阅读模式


 Web项目 
Jsp+Tomcat+Mysql乱码解决终极篇


写在之前:
   编码出现错误了在web开发的情况下是常常出现的问题。特别是接触了Jsp以来,所学的一切东西,TomcatMysql每样东西都产生了乱码。经过了几个web项目的开发,我总结出来了,一套系统的解决方案,仅供大家参考学习。
 
如果你已经是一位高手,或者对乱码有了深入的了解,就请放过本文吧,小弟设计web不久,所写的文章必定会有不足,指出就好,小弟脆弱的心灵经不起如潮涌般的狂踩。谢谢。
----------------------------------------------------------------------------------------
 
乱码由来:
据江湖盛行的传说,文字的编码分为很多的种类,unicodeUtf-8GBKGB2312等等编码。各个国家,各个地方的使用文字不同一,所以编码不一样。当然不一样编码,他们所编码的格式也就不一样。当使用一种编码格式去对文字编码,再用另一种格式对文字进行解码,所得的结果就变成了乱码。
--------------------------------------------------------------------------------------------
 
 
有人传言说,在JspTomcatMysql上统一编码就可以解决问题了。
此话是没有错的,但是能真正的的统一编码又有几个。
--------------------------------------------------------------------------------------------
 
 
乱码出现不用慌:
   三个问题问自己
①写了过滤器没有?
Jsp头部的编码与MySQL里的编码一样吗?
JspHtml等文件的存储格式有没有改动(默认是unicode,一般不会改)?
 
以上三个问题一般有过web学习的同学都会注意了。如果没有做,那就先完成以上步骤再向下看。
 
但是,以上都做了还出现乱码怎么办?  这个就是本文的重点了。
-----------------------------------------------------------------------------
 
 
以下方法我称为(定位法)
定位法——主要是看编码出错时有哪里引起的,哪里出错就在哪里修改。
 
需要在以下几个地方打印或查看
①网页显示页面
②处理动作的action
③数据库操作的SQL语句
④数据库中的内容
 
以下我们统一用一个UTF-8编码作为例子
1、如果一个提交信息页面,输入中文,然后在②处理动作的action中所打印的就出现乱码了。
获取表单提交的数据时的中文乱码问题
原因:由于TomactJ2EE实现对表单提交,即以post方式提交的参数采用默认的ISO-8859-1来处理,所以中文就会出现乱码
解决:检查filter设置是否错误,或者没有在xml中配置生效。
②页面之间传中文参数问题
在页面之间传中文参数,需要在tomact的安装目录的/conf/server.xml文件中找到Connector,加上URIEncoding="utf-8",如下


<Connector
port="8080"               maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"  URIEncoding="utf-8"/>



  
 
 
2、如果一个页面提交信息,①网页显示页面②处理动作的action显示和打印都的都是正常的,而③数原因:数据库安装的时候设计的默认连接不是UTF-8
据库操作的SQL语句中打印出现乱码。如:



insert into t_userinfo(user_num,user_password,user_type,user_name,user_comments) values ('20090840122','123456',0,'???','???')



解决:连接数据库的时候的语句,加上一句?useUnicode=true&characterEncoding=UTF-8"
test数据库连接为:
   "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
 
 
 
 
 
3、如果一个页面提交信息,之前的都没有出现乱码,却在④数据库中的内容显示的为乱码,或者,直接报错,无法直接添加信息。
如:

DSC0000.jpg
 

 
只要出现中文的地方都变为 了  ???
原因:数据库表的编码格式,数据库字段的编码格式,与web项目的编码格式不统一。
即如图所示地方没设置好:



DSC0001.jpg
 

 
DSC0002.jpg
 
 
解决:修改一样即可。
 
 
 
 
 
 
4、一个读取显示页面,如果④数据库中的内容显示是正常的,但是①网页显示页面②处理动作的action,打印显示却是乱码。
原因:信息存储不存在乱码,乱码处于传输和显示上。
解决:检查filter设置的正确与否,检查JSP页面的默认编码是否与数据库统一。
 
 
 
 
 
 
5、一个读取显示页面,之前的都没有错,只有①网页显示页面是乱码。
原因:信息存储不存在乱码,乱码处于显示上。
解决:检查JSP页面的默认编码是否与数据库统一。
检查,
   Jsp页面头部加上:<%@ page contentType="text/html;charset=UTF-8" %>
   head部分加上:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
这两句话是否存在,存在是否错误。
--------------------------------------------------------------------------------------------
 
 
 

小结:
以上这些步骤能很好的应对我们WEB项目上常出现的各种乱码问题,“定位法”是本人所想,个人感觉,在查找编码错误的时候,具有“快”、“狠”、“准”的效果,或许有少许不合理,或许能对大家多少有点帮助。书写本文,时间多少有点匆忙如有错误,就请指出,相互学习,相互进步,谢谢。
 



  <!--EndFragment-->

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-287074-1-1.html 上篇帖子: Flex与Java基于RemoteObject进行数据库(mysql)操作 下篇帖子: 百万记录级MySQL数据库及Discuz!论坛优化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表