tomcat、mysql、程序编码问题

arthur.dy.lee 2009-08-22 05:14:46
Tomcat提示错误:
信息: Server startup in 1142 ms
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Unknown initial character set index '45' received from server. Initial client character set can be forced via the 'characterEncoding' property.)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1225)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:67)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: Unknown initial character set index '45' received from server. Initial client character set can be forced via the 'characterEncoding' property.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.Connection.configureClientCharacterSet(Connection.java:2345)
at com.mysql.jdbc.Connection.initializePropsFromServer(Connection.java:3913)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2683)
at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1247)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1221)
... 20 more

------------------------
多网上查了一下,是程序编码 、 mysql编码 、web服务器编码不一致的问题。我修改了三方编码,如下:
Mysql:

mysql> show variables like 'character_set_%';
+--------------------------+----------------------------------------------------
-----+
| Variable_name | Value
|
+--------------------------+----------------------------------------------------
-----+
| character_set_client | utf8
|
| character_set_connection | utf8
|
| character_set_database | utf8
|
| character_set_filesystem | binary
|
| character_set_results | utf8
|
| character_set_server | utf8
|
| character_set_system | utf8
|
| character_sets_dir | D:\Program Files\MySQL\MySQL Server 6.0\share\chars
ets\ |
+--------------------------+----------------------------------------------------
-----+
8 rows in set (0.00 sec)

========

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)


Tomcat 修改 server.xml如下:


<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
-->
<!-- Define a SSL HTTP/1.1 Connector on port 8443
This connector uses the JSSE configuration, when using APR, the
connector should be using the OpenSSL style configuration
described in the APR documentation -->
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>




============

web.xml:


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

</web-app>



index.jsp:

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page session="false"%>


<%
out.print("my test start");
DataSource ds=null;
try{
InitialContext ctx=new InitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql");
Connection conn=ds.getConnection();
Statement st=conn.createStatement();

String strSql="select * from users";
ResultSet rs=st.executeQuery(strSql);
while(rs.next()){
out.print(rs.getString(1));
}
out.print("my test end");
}catch(Exception ex){
out.print("error happen attention:"+ex.getMessage());
ex.printStackTrace();
}

%>


========================================
========================================

我想做一个连接池,弄了一天多了,还没搞好,太郁闷了。实是找不出错误了,各位大虾有劳了,鞠躬。

我从网上看Tomcat6 mysql连接池配置,只用修改context.xml就行,现修改如下:
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/test"
username="root"
password="pain"
maxActive="100"
maxIdle="30"
maxWait="10000"
disableUploadTimeout="true"
URIEncoding="UTF8"/>
应该没有问题吧。
...全文
1760 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhang_yu_QIN 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 paincupid 的回复:]
因为报错,所以才在server.xml中加入URIEncoding="UTF-8"的

characterEncoding 应该改哪里?
[/Quote]

寫個過濾器 在web。xml配置下就OK了。
arthur.dy.lee 2009-08-23
  • 打赏
  • 举报
回复
因为报错,所以才在server.xml中加入URIEncoding="UTF-8"的

characterEncoding 应该改哪里?
ouyangyh 2009-08-23
  • 打赏
  • 举报
回复
characterEncoding
应该是字符编码的问题吧
closewbq 2009-08-23
  • 打赏
  • 举报
回复
先从server.xml中去掉URIEncoding="UTF-8"试验下。
xuexijava 2009-08-23
  • 打赏
  • 举报
回复
迷糊。。。。
帮顶
Aishangwan 2009-08-22
  • 打赏
  • 举报
回复
顶一个!看得挺乱的。
arthur.dy.lee 2009-08-22
  • 打赏
  • 举报
回复
我修改了程序编码 、 mysql编码 、web服务器编码,都设成了UTF-8,为何还是报这种错误呢?
arthur.dy.lee 2009-08-22
  • 打赏
  • 举报
回复
我修改了程序编码 、 mysql编码 、web服务器编码,都设成了UTF-8,为何还是报这种错误呢?
arthur.dy.lee 2009-08-22
  • 打赏
  • 举报
回复
我修改了程序编码 、 mysql编码 、web服务器编码,都设成了UTF-8,为何还是报这种错误呢?
xiaozejun 2009-08-22
  • 打赏
  • 举报
回复
楼主最下面的这段连接池是没有问题的 其他的就不知道啦 期待高手解决
本下载包与书籍的实战篇紧密结合. 下载包中的程序是一个简明的示例论坛程序,按照循序渐进的原则,分为不同的步骤: 步骤1: 建立最简单的项目基础结构:Board/User/Article三个类,包含最基本的配置文件。同时,在这一步中,建立测试类,刻画项目各个类之间的契约关系。 步骤2: 对文章的种类增加“投票”类型,展示对多型的处理。 步骤3: 增加webwork实现的GUI。 加入中文支持。 步骤4: 升级到Hibernate 3。 环境说明 --------- 程序包中的程序经过测试的运行环境为: 1, Tomcat 5.0.25 2, Hibernate 2.1.7 3, Hibernate 3.0.2 4, Eclipse 3.0.1 (作为IDE) 5, ant 1.6(作为build工具) 6, java sdk 1.4.2 7, mysql 4.1 (作为后台数据库) 8, 至少250M硬盘空间(hibernate 2,3和webwork就将占据138M) 虽然在更高版本中应该可以不加修改的运行,但我们对此不加以保证。(v1.2将对Hibernate 3.0.4进行测试) 安装说明 --------- 1, 确认jdk 1.4.2已经正确安装; 2,将本程序包解压,假设目录为: x:\rs\hib-samples 3, 从hibernate的sf下载区下载2.1.7与3.0.2版本: http://sourceforge.net/project/showfiles.php?group_id=40712 4,将下载的hibernate包解压到x:\rs\hib-samples\hibernate-2.1与x:\rs\hib-samples\hibernate-3,目录结构应该为: x: + rs + hib-samples <--- 本文件包解压的目录 + forum-step1-db-first-middlegen + forum-step1-db-first-synchronizer + forum-step2 + ... + hibernate-2.1 <--- Hibernate 2.1.7解压到这里 + bin <--- 确认bin与doc目录就在解压后的hibernate-2.1目录中 + doc + ... + hibernate-3.0 <--- Hibernate 3.0.2解压到这里 + bin preference -> Java -> Build Path -> User Librarys,分别建立名为Hibernate2,hibernate3,mysql-jdbc的用户库,分别包含对应的lib文件(如hibernate2包含hibernate-2.1目录下的hibernate2.jar及其lib目录下的所有jar文件); 11, 在您的eclipse 中,导入各个目录下的.project文件,以建立工程.(工程名为step1,step2,step3,step4)。在工程的类路径配置中,使用上一步创建的用户库(step1-step3使用Hibernate2,step4使用hibernate3)。确保没有编译错误。 好了,您现在可以开始阅读代码,作一些自己的改变,看看您能得到什么结果 :) 中文处理说明 ------------ 关于中文的处理,是在step3加入的,因此在step1以及step2中,请使用英文进行实验。具体进行的处理为全程采用UTF-8编码. 1,mysql创建时,字符集必须选择UTF-8 2,在mysql jdbc连接的url中,必须指定采用utf-8 encoding。 jdbc:mysql://localhost/forum?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8 3,在jsp页面中,指定页面采用UTF-8编码. 假若在您的项目中,必须使用GBK编码,则在以上的各个地方,都需要把UTF-8更换为GBK方可正常使用。 版本更新 ----------- v1.2 (PLAN,TBD) * 转换到JTA * 给出一个脱离DAO模式的例子 * 给出for hibernate 3的xdoclet例子 v1.1 (2005.5.25) * 分离db目录下的build.xml * 增加了对投票的图形显示 * 修正了和webwork相关的一个中文bug v1.0 (2005.4.20) * 初始版本

81,117

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧