MySQL+tomcat乱码的产生与解决

以下的文章主要向大家介绍的是MySQL+tomcat乱码的实际解决方案,以及对MySQL数据库引起的乱码的缘由以及对其具体的解决方案的介绍,同时也有对tomcat下的乱码的解决方案的介绍。

一:MySQL引起的乱码解决方案

一般由以下几种原因引起:

(1)java中处理中文字符正常,在cmd client中显示乱码是字符集的问题.

 

(2)字段长度设置够长,但插入中文字符时提示 com.MySQL.jdbc.MySQLDataTruncation: Data truncation: Data too long for column错误是字符集的问题.

(3)乱码问题归根到底是字符集的问题,那就从字符集设置方面考虑,不外乎下面几个方面:server,client,database,connection,results.

 

解决办法

 

(1)修改 my.ini(MySQL Server Instance Configuration 文件)

 

 

  1. # CLIENT SECTION  
  2. [client]  
  3. port=3306 
  4. [MySQL]  
  5. default-character-set=utf-8  
  6. # SERVER SECTION  
  7. [MySQLd]  
  8. default-character-set=utf-8  

 

(2)修改data目录中相应数据库目录下的db.opt配置文件

 

  1. default-character-set=utf-8   
  2. default-collation=utf8_general_ci 

 

 

(3)数据库连接串中指定字符集

 

  1. URL=jdbc:MySQL://yourIP/college?user=root&password=yourPassword&useUnicode=true&characterEncoding=utf-8 

(4)在创建数据库时指定字符集

 

  1. create database yourDB CHARACTER SET utf-8; 

ok,经过以上4个方面的设置,基本上MySQL引起的乱码问题已经解决!

二:tomcat下的乱码解决方案

 

首先将乱码问题分为三类JSP页面显示中文乱码;表单提交乱码;数据库应用乱码

1,JSP页面内输出中文时出现乱码

解决方案在JSP文件中使用page命令指定响应结果的MIME类型,如<%@ page language=”java” contentType=”text/html;charset=utf-8″ %>

2,表单提交乱码(分为post和get两种提交方式)

使用request.getParameter方法得到乱码,这是因为tomcat处理提交的参数时默认的是iso-8859-1,表单提交get和post处理乱码问题不同,下面分别说明。

(1)POST处理方式

对post提交的表单通过编写一个过滤器的方法来解决,过滤器在用户提交的数据被处理之前被调用,可以在这里改变参数的编码方式,

 

过滤器的代码如下:

 

  1. package com.webim.search;  
  2. import javax.servlet.*;   
  3. import javax.servlet.http.HttpServletRequest;   
  4. import javax.servlet.http.HttpServletResponse;  
  5. public class FileFilter implements Filter {  
  6. protected String encoding = null;   
  7. protected FilterConfig filterConfig = null;   
  8. protected boolean ignore = true;  
  9. public void init(FilterConfig filterConfig)   
  10. throws javax.servlet.ServletException {   
  11. this.filterConfig = filterConfig;   
  12. this.encoding = filterConfig.getInitParameter("encoding");   
  13. String value = filterConfig.getInitParameter("ignore");   
  14. if (value == null) {  
  15. this.ignore = true;  
  16. } else if (value.equalsIgnoreCase("true")) {  
  17. this.ignore = true;  
  18. } else if (value.equalsIgnoreCase("yes")) {  
  19. this.ignore = true;  
  20. } else {  
  21. this.ignore = false;  
  22. }  
  23. }  
  24. public void doFilter(ServletRequest request, ServletResponse response,   
  25. FilterChain chain) throws java.io.IOException,   
  26. javax.servlet.ServletException {  
  27. if (ignore || (request.getCharacterEncoding() == null)) {  
  28. String encoding = selectEncoding(request);  
  29. if (encoding != null) {  
  30. request.setCharacterEncoding(encoding);  
  31. }  
  32. }   
  33. chain.doFilter(request, response);  
  34. }  
  35. public void destroy() {   
  36. this.encoding = null;   
  37. this.filterConfig = null;  
  38. }  
  39. protected String selectEncoding(ServletRequest request) {  
  40. return (this.encoding);  
  41. }  
  42. }  

 

web.xml文件加入过滤器:

 

  1. <filter>   
  2. <filter-name>FileFilter</filter-name>   
  3. <filter-class>com.webim.search.FileFilter</filter-class>   
  4. <init-param> 
  5. <param-name>encoding</param-name> 
  6. <param-value>utf-8</param-value> 
  7. <!--gbk或者gb2312或者utf-8--> 
  8. </init-param> 
  9. <init-param> 
  10. <param-name>ignore</param-name> 
  11. <param-value>true</param-value> 
  12. </init-param> 
  13. </filter> 
  14. <filter-mapping> 
  15. <filter-name>FileFilter</filter-name> 
  16. <servlet-name>/*</servlet-name> 
  17. </filter-mapping> 

 

* 注意filter元素要放在所有web.xml元素之前。

(2) Get方法的处理

tomcat对post和get的处理方法不一样,所以过滤器不能解决get的乱码问题,它需要在其他地方设置。

打开<tomcat_home>\conf目录下server.xml文件,找到对8080端口进行服务的Connector组件的设置部分,给这个组件添加一个属性:URIEncoding=”utf-8″。修改后的Connector设置为:

 

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

 

* 注意修改后重新启动tomcat才能起作用。

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/230899.html<

(0)
管理的头像管理
上一篇2025-04-19 11:01
下一篇 2025-04-19 11:02

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注