日期:2014-05-16  浏览次数:20601 次

Servlet中通过JDBC数据库连接提示“ClassNotFoundException”的问题

小钟在写一个JSP网站的时候,需要使用Servlet来处理用户提交的表单请求以及简单的用户管理(CRUD),使用MySQL数据库。小钟把mysql-connector-java-5.1.10-bin.jar放在WEB-INF/lib下,并在Build Path里面添加了该jar包,当小钟写好数据库连接时发现连不上,报了个“ClassNotFoundException”的错误,一看原来是在

?Class.forName("com.mysql.jdbc.Driver");

时找不到jdbc包,明明在Path里面添加了怎么会找不到呢?

于是小钟单独写了一个普通的class,发现连接数据库完全没有问题,问题在哪儿呢?Google了一下,看到有人说“如果你在Servlet里面写数据库连接的话应该在Tomcat的server.xml里面指定jdbc jar包的路径”,一下子就想明白了。因为Servlet在Tomcat上运行,需要为Tomcat指定jdbc包的路径,有两种方法:一、将jdbc包拷贝到Tomcat的lib目录下;二、在Tomcat的server.xml文件中指定jdbc包的路径,使得Tomcat在运行servlet时可以查找到com.mysql.jdbc.Driver这个class文件,不然就会提示“ClassNotFoundException”的错误。

?
1 楼 thewaychung 2011-07-10  
后记:本来以为这样操作也算是合理的,但是当本人在stackoverflow上回答一个类似的问题What's wrong with my classpath?时被人指出这样操作并不严格,甚至用了as a general rule you should never...这样的字眼,仔细思考一下觉得确实也挺在理。一是这样操作对于部署应用来说增加了额外的复杂度,因为每次都需要将jar包单独放置到Tomcat库下;二是如果大家都把引用包放Tomcat的库中这样也确实很不合理,因为Tomcat只是作为一个应用服务器承载应用的,jar包的引用应该封装在应用里,这样才是严谨的。