我的環境變量如下
CATALINA_HOME=F:\Tomcat5CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (此處加上mysql-connector-java-3.0.16-ga-bin.jar的路徑依舊不行)JAVA_HOME=D:\jdk5path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;F:\java_jars\apache-ant-1.6.1\apache-ant-1.6.1\bin
CATALINA_HOME=F:\Tomcat5CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (此處加上mysql-connector-java-3.0.16-ga-bin.jar的路徑依舊不行)JAVA_HOME=D:\jdk5path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;F:\java_jars\apache-ant-1.6.1\apache-ant-1.6.1\bin
如下是 下載文檔中的Reader.txt 内容环境说明
---------
程序包中的程序经过测试的运行环境为:
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 <--- 确认bin与doc目录就在解压后的hibernate-3目录中
+ doc
+ ...5,确认tomcat 5 安装正确。检查你的系统中,正确设置了CATALINA_HOME环境变量:
若您是windows 2000/xp系统,请右键点击"我的电脑","高级","环境变量".
确认其中的CATALINA_HOME环境变量正确指向您的tomcat 安装目录.
例:
CATALINA_HOME=D:\PROGRA~1\APACHE~2\TOMCAT~1.06, 确认mysql 4安装正确.
我们建议两种不同的mysql安装搭配:
a) 假若您使用windows平台,并且是初次使用mysql ,我们建议采用另一个免费安装包来安装,它就是easy php: http://prdownloads.sourceforge.net/quickeasyphp/easyphp1-8_setup.exe?download
无需预先安装mysql,只需一次安装,它不仅包含了mysql 4.1.9,还包括了apache, php以及phpmyadmin ,而后者几乎是全球采用率最高的基于浏览器的mysql管理平台,非常简单易用。 b) mysql 正式安装版 + 客户端
mysql可以在此下载:http://dev.mysql.com/downloads/mysql/4.1.html
客户端有多种,可以采用其自己的mysql administrator,也可以采用mysql front等商业产品。mysql front有三十天免费的无限制试用版本,是一个值得推荐的工具:http://www.mysqlfront.de/download.html 在安装完mysql之后,请使用客户端或者phpmyadmin建立一个名为forum的mysql数据库,其字符集必须为UTF-8(见下面关于中文的说明,在phpmyadmin中应该选择utf8_general_ci)。另外还需要建立名为forum的用户,密码也为forum,并且对forum具有完全访问权限。(假若您希望使用其它用户名如root,您需要修改hibernate的数据库配置中的连接参数——位于hibernate.cfg.xml中,以及创建数据库表时的连接参数——位于build.xml中。)7, 确认ant安装正确. ant可以在此下载:
http://ant.apache.org
或 http://www.redsaga.com/down/apache-ant-1.6.1.zip解压后,请将其bin目录置于系统path中.8, 注意,我们的成品工程是forum-step3。step1和step2都是中间过程。
确认您可以编译整个step3工程,在命令行下输入,
cd x:\rs\hib-samples (换成您的目录)
cd forum-step3
ant假若安装正确的话,会给出一个指令说明.
执行:
ant all
它会自动进行数据库初始化、编译、启动tomcat容器.(此命令将会启动tomcat,因此之前tomcat必须处于停止状态)然后,打开您的浏览器,输入http://localhost:8080/forum 您应该看到我们的示例正常运行.
9, 在您的Eclipse 3中,按照书中的步骤安装hibernate synchronizer.10,在您的eclipse中,建立两个User Library:
菜单window -> 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编码.
<%@ page contentType="text/html;charset=utf-8"%>假若在您的项目中,必须使用GBK编码,则在以上的各个地方,都需要把UTF-8更换为GBK方可正常使用。
javax.servlet.ServletException: JDBC Driver class not found:
at com.redsaga.hibernatesample.step3.util.InitializeServlet.init(InitializeServlet.java:32)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1029)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4357)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
at org.apache.catalina.core.StandardService.start(StandardService.java:480)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
----- Root Cause -----
net.sf.hibernate.HibernateException: JDBC Driver class not found:
at net.sf.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:63)
at net.sf.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:83)
at net.sf.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:76)
at net.sf.hibernate.cfg.Configuration.buildSettings(Configuration.java:1160)
at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:794)
at com.redsaga.hibernatesample.step3.base._BaseRootDAO.initialize(_BaseRootDAO.java:56)
at com.redsaga.hibernatesample.step3.base._BaseRootDAO.initialize(_BaseRootDAO.java:40)
at com.redsaga.hibernatesample.step3.util.InitializeServlet.init(InitializeServlet.java:28)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1029)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4357)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
at org.apache.catalina.core.StandardService.start(StandardService.java:480)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
把mysql-connector-java-3.0.16-ga-bin.jar加到classpath里面。写一个简单的访问数据库的程序。看看能不能成功。
换了mysql-connector-java-3.1.7-bin.jar,
ant all的时候报错F:\java_jars\samples-dist\forum-step3\db\build.xml:32: com.mysql.jdbc.MysqlDataT
runcation: Data truncation: Data truncated for column 'name' at row 1build.xml文件如下
<?xml version="1.0"?><project name="rsForum" basedir="." default="usage"> <property name="name" value="rsForum"/> <property name="rsForum.root" value="."/>
<property name="src.dir" value="src"/>
<property name="build.dir" value="web\WEB-INF\classes"/>
<property name="db.dir" value="db"/> <property name="hibernate2.root" value="../hibernate-2.1"/>
<property name="hibernate3.root" value="../hibernate-3.0"/>
<property name="webwork.root" value="../webwork-2.1.7"/>
<property name="ext-lib.root" value="../lib"/>
<property name="war.lib" value="web\WEB-INF\lib"/> <property name="testsrc.dir" value="test"/>
<property name="testbuild.dir" value="${rsForum.root}/build/.testclasses"/>
<property name="testreports.dir" value="${rsForum.root}/build/junit-reports"/>
<property name="testhtml.dir" value="${testreports.dir}/html"/> <target name="set-db-properties" description="Setup db connection parameters">
<property name="db.driver" value="com.mysql.jdbc.Driver"/>
<property name="db.url" value="jdbc:mysql://localhost/forum?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8"/>
<property name="db.user" value="forum"/>
<property name="db.pw" value="forum"/>
<property name="db.jdbcdriver" value="mysql-connector-java-3.1.7-bin.jar"/>
</target> <property file="build.properties"/>
<path id="master-classpath">
<fileset dir="${hibernate2.root}">
<include name="hibernate2.jar"/>
</fileset>
<fileset dir="${hibernate2.root}/lib">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${webwork.root}">
<include name="*.jar"/>
</fileset>
<fileset dir="${webwork.root}/lib">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${rsForum.root}/../lib">
<include name="**/*.jar"/>
</fileset>
</path> <path id="console-classpath">
<pathelement location="${build.dir}"/>
<fileset dir="${rsForum.root}/../tools/consoleLoader">
<include name="loader.jar"/>
</fileset>
<fileset dir="${rsForum.root}/../tools/hibernateConsole">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${hibernate2.root}">
<include name="hibernate2.jar"/>
</fileset>
<fileset dir="${hibernate2.root}/lib">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${rsForum.root}/../lib">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="usage">
<echo message=""/>
<echo message="rsForum build file"/>
<echo message="------------------------------------------------------"/>
<echo message=""/>
<echo message="Available targets are:"/>
<echo message=""/>
<echo message="------- Operations ---------------------------------"/>
<echo message="clean --> Clean output dirs"/>
<echo message="build --> Compile main Java sources"/>
<echo message="createTables --> Initialize the database"/>
<echo message="dropTables --> drop tables,clear any data"/>
<echo message="sampleData --> create sample data"/>
<echo message="copyjar --> copy hibernate and webwork jar into WEB-INF\lib"/>
<echo message=""/>
<echo message="------- Run -------------------------------------"/>
<echo message="console --> launch hibernate console"/>
<echo message="tests --> Run junit tests.Will clean database first"/>
<echo message="report --> View junit test result"/>
<echo message="tomcat --> Start Tomcat. Let's Go! (Please stop tomcat if it's active)"/>
<echo message=""/>
<echo message="------- First Time --------------------------------"/>
<echo message="all --> clean,createTables,createTables,sampleData,copyjar,build,tomcat"/>
</target>
<target name="clean" description="Clean output dirs (build, testbuild, testreports, weblib, dist)">
<delete dir="${build.dir}"/>
<delete dir="${testbuild.dir}"/>
<delete dir="${testreports.dir}"/>
<delete dir="${war.lib}"/>
<delete dir="tomcat-run/work/Catalina"/>
<delete dir="bin"/>
</target> <target name="copyjar" description="copy jar files into WEB-INF\lib">
<mkdir dir="${build.dir}"/> <copy todir="${war.lib}">
<fileset dir="${hibernate2.root}">
<include name="*.jar"/>
</fileset>
<fileset dir="${hibernate2.root}/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${webwork.root}">
<include name="*.jar"/>
</fileset>
<fileset dir="${webwork.root}/lib/core">
<include name="*.jar"/>
</fileset>
<fileset dir="${ext-lib.root}">
<include name="**/*.jar"/>
</fileset>
</copy>
</target> <target name="build" depends="copyjar" description="Compile main source tree java files into class files">
<mkdir dir="${build.dir}"/>
<javac destdir="${build.dir}" source="1.4" target="1.4" debug="true"
deprecation="false" optimize="false" failonerror="true">
<src path="${src.dir}"/>
<classpath refid="master-classpath"/>
</javac>
<copy todir="${build.dir}">
<fileset dir="${src.dir}">
<exclude name="**/*.java"/>
<exclude name="**/*.properties_GBK"/>
</fileset>
</copy> <native2ascii encoding="GBK" src="${src.dir}" dest="${build.dir}" ext=".properties" includes="*.properties_GBK"/>
</target>
<target name="createTables" depends="set-db-properties" description="Initialize the selected database">
<ant dir="${db.dir}" target="createTables"/>
</target> <target name="sampleData" depends="set-db-properties" description="create sample data">
<ant dir="${db.dir}" target="sampleData"/>
</target> <target name="dropTables" depends="set-db-properties" description="clear any created data">
<ant dir="${db.dir}" target="dropTables"/>
</target> <target name="tests" depends="build,dropTables,createTables" description="Run tests using initialized database">
<delete dir="${testbuild.dir}"/>
<delete dir="${testreports.dir}"/>
<delete dir="${testhtml.dir}"/> <mkdir dir="${testbuild.dir}"/>
<mkdir dir="${testreports.dir}"/>
<mkdir dir="${testhtml.dir}"/> <javac srcdir="${testsrc.dir}" destdir="${testbuild.dir}" deprecation="true">
<classpath path="${build.dir}"/>
<classpath refid="master-classpath"/>
<classpath path="${rsForum.root}/lib/junit.jar"/>
</javac> <junit printsummary="true" fork="yes">
<formatter type="xml"/>
<test name="test.com.redsaga.hibernatesample.step3.AllTests" todir="${testreports.dir}"/>
<classpath path="${build.dir}"/>
<classpath path="${src.dir}"/>
<classpath path="${testbuild.dir}"/>
<classpath path="${testsrc.dir}"/>
<classpath refid="master-classpath"/> </junit> <junitreport todir="${testhtml.dir}">
<fileset dir="${testreports.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${testhtml.dir}"/>
</junitreport> </target> <target name="all" depends="clean,dropTables,createTables,sampleData,copyjar,build,tomcat" description="clean,dropTables,createTables,sampleData,copyjar,build,tomcat"/>
<target name="report" >
<exec dir="${testhtml.dir}" executable="cmd.exe">
<arg line="/c start index.html"/>
</exec>
</target> <target name="console" description="launch hibernate console">
<java classname="com.redsaga.util.hibernateConsole2Loader.Loader" fork="true">
<classpath>
<path refid="console-classpath"/>
</classpath>
</java>
</target> <target name="tomcat" description="">
<exec dir="tomcat-run" executable="cmd.exe" >
<arg line="/c start.bat"/>
</exec>
</target></project>
ant all可以正常启动为什么hibernate2的就不可以,郁闷。
现在问题和以前一样,还是 在ant启动tomcat时 JDBC Driver class not found:
几近绝望了
ant 的这个<target name="copyjar" description="copy jar files into WEB-INF\lib">
应该是拷贝jar包的,你放到webwork-2.1.7的jar包的目录里面去,看看,ant执行完成之后
看看web\WEB-INF\lib 目录下是不是把3.1.7的jar放到里面去了。
再次感谢。问题解决了,是程序的hibernate.cfg.xml文件有问题... ...瀑布汗啊哎,csdn多点热心人就好了。
结贴
难道是hibernate.cfg.xml指定的driver_class不是mysql
加上com.mysql.jdbc.Driver就可以了,另外hibernate.connection.url属性也要改