TOMCAT配置示例

 

从网上的Blog转来的,这里唯一不同的就是人家使用RPM安装的。说明还是比较细致的

 

环境:

Linux系统

java1.4.2

TOMCAT5.5.23

MYSQL5.0.22

 

安装TOMCAT后,目录common/lib中一般应有如下驱动:

commons-el.jar (Commons Expression Language 1.0)

commons-logging-api.jar (Commons Logging API 1.0.x)

jasper-compiler.jar (Jasper 2 Compiler)

jasper-compiler-jdt.jar (Eclipse JDT Java compiler)

jasper-runtime.jar (Jasper 2 Runtime)

jsp-api.jar (JSP 2.0 API)

naming-common.jar (JNDI Context implementation)

naming-factory.jar (JNDI object factories for J2EE ENC support)

naming-factory-dbcp.jar (DataSource implementation based on commons-dbcp)

naming-resources.jar (JNDI DirContext implementations)

servlet-api.jar (Servlet 2.4 API)

 

而使用redhatRPM包安装TOMCAT后,jar文件并不完全,因此向common/lib添加如下驱动:

naming-factory-dbcp.jar (DataSource implementation based on commons-dbcp)

mysql-connector-java-5.1.5-bin.jar

 

如使用hibernate则应在项目下的WEB-INF/lib下添加如下驱动:

antlr-2.7.6.jar

hibernate3.jar

asm-all-3.1.jar

cglib-2.2.jar

dom4j-1.6.1.jar

ehcache-1.2.3.jar

 

1.打开MYSQL,建立数据

创建数据库:create database testdb

使用这个库,在里面创建一张表:

CREATE TABLE `test` (

  `id` int(11) NOT NULL auto_increment,

  `name` varchar(30) NOT NULL default '',

  `address` varchar(50) default NULL,

  PRIMARY KEY  (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;

 

插入纪录:

INSERT INTO `test` VALUES (1,'tom','123'),(2,'alice','123'),(3,'tom','123'),(4,'tom','123'), (5,'tom','123'), (6,'tom','123');

 

2.打开TOMCAT安装目录下的CONF目录中文件SERVER.XML中添加如下内容:

<GlobalNamingResources>

.......................

<Resource

 auth=”Container”

  type="javax.sql.DataScource"

  name="jdbc/dstest"

  driverClassName="com.mysql.jdbc.Driver"

  maxActive="10"

  maxIdle="3"

  maxWait="5000"

  username="root"

  password="qwe123"                     # qwe123为你自己数据库的密码

  url="jdbc:mysql://localhost:3306/testdb"/>   # testdb为数据库的名字

</GlobalNamingResources>

 

3.在目录conf/Catalina/localhost下建立如下文件:

<?xml version="1.0" encoding="UTF-8"?>

<Context

crossContext="true"

    reloadable="true">

  <ResourceLink

global="jdbc/dstest"

name="jdbc/dstest"

type="javax.sql.DataSource"/>

  <ResourceLink

global="UserDatabase"

name="UserDatabase"

type="org.apache.catalina.UserDatabase"/>

</Context>

 

4.在目录webapps下创建目录dstest,在应用dstestWEB-INF目录下的WEB.XML中写入如下内容:

<web-app>

  <resource-ref>

    <description>mysql connection</description>

<res-ref-name>jdbc/mysql</res-ref-name>

    <res-type>javax.sql.DataScource</res-type>

    <res-auth>Container</res-auth>

  </resource-ref>

</web-app>

 

5.在目录dstest中写一个test.jsp测试程序:

<%@ page language="java"%>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>

<html>
<head>
  <title>Test Database </title>
</head>
<body >
  <center>Test Database Source Pools</center>
  <table border="0" align="center">
  <%
    Context initctx = new InitialContext();
    if(initctx == null )
      throw new Exception("No Context");

    DataSource ds = (DataSource) initctx.lookup("java:comp/env/jdbc/dstest");

    Connection conn = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;

    try {
      conn = ds.getConnection();
      stmt = conn.prepareStatement("select * from test");
      rs = stmt.executeQuery();
      while(rs.next()){
        out.print("<tr>");
        out.print("<td>"+rs.getInt(1)+"</td>");
        out.print("<td>"+rs.getString(2)+"</td>");
        out.print("<td>"+rs.getString(3)+"</td>");
        out.print("</tr>");
      }
      rs.close();
      rs=null;
      stmt.close();
      stmt=null;
      conn.close();
      conn =null;
    } catch(SQLException e){
      e.printStackTrace();
    } finally {
      if (rs != null) {
        try { rs.close(); } catch (SQLException e) { ; }
        rs = null;
      }
      if (stmt != null) {
        try { stmt.close(); } catch (SQLException e) { ; }
        stmt = null;
      }
      if (conn != null) {
        try { conn.close(); } catch (SQLException e) { ; }
        conn = null;
      }
    }
  %>
  </table>
</body>
</html>

 

6.测试,运行TOMCAT,打开网页输入http://localhost:8080/dstest/test.jsp,如果能看到数据库中刚保存的数据,那就表示配置成功。

 

 

可能出现的问题:

1Cannot create JDBC driver of class '' for connect URL ''

问题:找不到jdbc驱动,但是提示信息里的class值为null,所以,可以断定Tomcat没有找到Server.xml里的Resource配置信息。

可能的原因包括:(1)没有配置Resource;(2Resource配置信息放置的位置错误。(3)一个不容易发现的错误,driverClassNameurl拼写错误。

解决办法:确认Resource配置正确,并且必须放在DefaultContext或者 Context配置节内。

 

2Cannot create JDBC driver of class 'xxx' for connect URL ''

解决办法:配置的数据库驱动类名xxx是错误的,检查并修改即可;如果确认正确,那就是找不到驱动库,拷贝一个jarTomcat/common/lib中即可。

 

3Cannot create JDBC driver of class '' for connect URL 'xxx'

解决办法:配置的url字符串语法是错误的,检查后修改即可。

 

4Cannot create PoolableConnectionFactory, cause: Io 异常: Connection refused

问题:无法创建连接池工厂对象,原因是连接被拒绝。

解决办法:检查url字符串,可能服务器地址、端口、数据库名或者数据库实例名等信息错误。修改。

 

5No suitable driver

问题:没有匹配的驱动

分析:驱动程序配置错误,请确认Tomcatcommon/lib子目录中是否有数据库驱动jar

 

6Cannot create resource instance无法创建数据源实例

问题:找不到commons-dbcp-1.1.jar(版本可能不同)

解决办法:复制commons-dbcp-1.1.jar库文件到Tomcat/Common/lib子目录中。

 

7root cause

java.lang.NoClassDefFoundError: org/apache/commons/collections/CursorableLinkedList

问题:找不到commons- collections.jar

解决办法:复制commons-collections.jar库文件到Tomcat/Common/lib子目录中。

 

8root cause

java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool

问题:找不到commons-pool- 1.1.jar(版本可能不同)。

解决办法:复制commons-pool-1.1.jar库文件到Tomcat/Common/lib子目录中。

 

9: Error during query: Unexpected Exception: java.io.CharConversionException message given: null

请见 MySQL 论坛 http://forums.mysql.com/read.php?39,142452,142452

大多数情况下,将JAVA 1.4.x 升级到 1.5 即可。也可以在mysql 配置中将变量 default-character-set 设置为utf8,向文件 /etc/my.cnf中添加如下内容:

 [client]

 default-character-set=utf8

 [mysqld]

 default-character-set=utf8

设置完成后重新启动 mysql 即可。

你可能感兴趣的:(tomcat,数据库,jdbc,null,import,compiler)