最近在看Tomcat与Java Web开发技术详解这本书,把我在看书过程中遇到的问题整理一下,方便以后查询。
1、在237页,通过JDBC API访问数据库的JSP范例程序中,我按照书中说明,“确保MySQL的JDBC驱动器类库mysqldriver.jar 位于helloapp(即你的项目)/WEB-INF/lib目录下,或者,可以把mysqldriver.jar文件复制到<CATALINA_HOME>(即Tomcat的安装目录)/lib目录下”操作,但是并没有输出书中效果,问题排查过程如下:
(1) 现象:一开始在浏览器中输入http://localhost:8080/helloapp/dbaccess.jsp,结果是无法访问。
原因:我没有开启Tomcat。
方法:开启Tomcat方法是:到<CATALINA_HOME>/bin目录下,双击startup.bat文件;但是问题没有解决。
(2) 现象:在开启Tomcat后,再次输入上面网址,结果是Communication link failure: java.io.IOException, underlying cause: Unexpected end of input stream ** BEGIN NESTED EXCEPTION ** java.io.IOException MESSAGE: Unexpected end of input stream STACKTRACE: java.io.IOException: Unexpected end of input stream at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:1096) at
......
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) ** END NESTED EXCEPTION **
原因:上网查是说,是mysql驱动程序的问题,下载mysql-connector-java-5.0.3-bin.jar就好。
方法:上网下载mysql-connector-java-5.0.3-bin.jar,把他放在helloapp(即你的项目)/WEB-INF/lib,然后在浏览器中对刚才的网址按回车就好。
2、在251页,发布和运行bookstore时出错,
2.1 对于使用数据源的方式(bookstore1),一开始出错:服务器端发生错误:Cannot create PoolableConnectionFactory (Server connection failure during transaction. Attempted reconnect 3 times. Giving up.)
原因:应该是驱动版本的问题
方法:当时用的是mysql5.6,所以下了个mysql-connector-java-5.0.6-bin.jar,放到<CATALINA_HOME>(即Tomcat的安装目录)/lib目录下即可。
2.2 对于直接使用JDBC访问数据库的方式(bookstore0),即使按照如上方法还是不行,会出现这个问题:服务器端发生错误:Communication link failure: java.io.IOException, underlying cause: Unexpected end of input stream ** BEGIN NESTED EXCEPTION **。
原因:还需要将mysql-connector-java-5.0.6-bin.jar文件放到bookstore/WEB-INF/lib目录下。
方法:需要将mysql-connector-java-5.0.6-bin.jar文件放到bookstore/WEB-INF/lib目录下。(注意:bookstore1的WEB-INF下没有lib,而bookstore0有)
开始遇到这个问题,我看网上很多人说是mysql-connector-java-5.0.6-bin.jar版本问题,但是我下了很多版本都不好使,我原本是用navicat自己建了一个用户hanson,并建了一个BookDB数据库,我猜可能是用户名的问题,或者是用户权限的问题。我就按照书上227页的步骤,建立一个用户叫"dbuser",密码为"1234",并给他授权之后,并把bookstore0和bookstore1关于用户名和密码的地方(bookstore0:webapps/bookstore0/src/mypack/BookDB.java,bookstore1:webapps/bookstore1/META-INF/context.xml),由hanson还原为dbuser。结果就好了,而且,对于mysql-connector-java-5.0.6-bin.jar不同的版本也能用了。真是好奇怪。