初学JSP+Servlet,今天在写一个小项目的时候,启动tomcat后,在网页输入地址一直显示ClassNotFoundException
而控制台一直输出java.sql.SQLException: No suitable driver found for jdbc:mysql://127.0.0.1:3306/jdbc
我看了看我之前写的项目,也没有出现过这种情况啊,况且我的jar包已经导入到Java Resources文件夹下的Libraries下了。我实在搞不懂错在哪,代码也反复检查了好几遍,确定没有错误。后来我仔细对比了两个项目,发现了一个差别,那就是一个项目的WEB-INF文件夹下的lib文件夹里有jdbc的jar包,另一个项目的lib文件夹下没有。我恍然大悟,原来如此,于是一顿操作,把jar包copy到lib文件夹下,运行就没有问题了。
我思考了一下,觉得应该是这样的,以前学习jdbc的时候,还没有涉及到Java web,只是单纯的用Java代码去读取数据库,然后输出结果到控制台,我们只需要把jar包导入到Libraries下就行了。但现在我们写的是Java web项目,它不是通过本地的JRE去运行的,它是通过Tomcat到web服务器上去运行的,所以你导入在Libraries的jar只是给你的Java代码用,保证它能正确运行并和数据库进行交互,但要在browser里运行,你就得让Tomcat认识它了,所以你还得在lib文件夹下导入要用到的jar包才行。
以上只是我的猜想,如有错误,欢迎批评指正。
扩展一下其他的知识
Tomcat有自身的类加载器,它的四组目录结构
- common
- server
- shared
- webapps
对应4个不同的自定义类加载器,
- CommonClassLoader
- CatalinaClassLoader
- SharedClassLoader
- WebappClassLoader
WebappClassLoader加载器专门负责加载webapps下面各个web项目的WEB-INF下的类库。而我们通过user library引入的jar包自然不会被WebappClassLoader加载器加载,所以必然会报ClassNotFoundException。