使用servlet时,com.mysql.jdbc.Driver的ClassNotFoundException

时间:2014-08-18 12:17:53

标签: servlets web-applications jdbc classnotfoundexception

这个奇怪的问题很长一段时间打断了我。我在eclipse中的动态Web应用程序中有一个类名Connector,代码如下:

public class Connector {

    private static final String dbURL = "jdbc:mysql://localhost:3306/";

    private Connection con;

    public Connector(String userName, String password) {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection(dbURL, userName, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
            catch (ClassNotFoundException e) {
            e.printStackTrace();
        } 
        catch (Exception e) {
            System.err.print("Unidentified exception has acurred!");
            e.printStackTrace();
        }
    }

当我在同一个名为portal的不同类中使用它时,它运行正常,但是当我尝试在包servlets中的servlet中使用它时,名为{{ 1}},我得到ClassNotFoundException。 Class位于所有类的构建路径中,我通过尝试从servlet导入它来检查它,但是当我创建新实例时,它没有被识别。我试图将servlet移动到连接器的包中,反之亦然,它并没有影响。这是servlet的代码:

LoginHandle.java

抱歉,如果我的英语不好,或者缺少详细信息

1 个答案:

答案 0 :(得分:0)

您的驱动程序不在服务器类路径中,构建路径与此无关。 您没有编写您正在使用的应用程序服务器。您还应该在servlet中使用DataSource,而不是DriverManager。 Here是Tomcat的示例配置。

更新

对于Tomcat 7,您需要执行以下操作:

将mysql jar放入$CATALINA_HOME/lib
在上下文中配置Datasource

 <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
                       maxActive="100" maxIdle="30" maxWait="10000"
                       username="user" password="pass" 
                       driverClassName="com.mysql.jdbc.Driver"
                       url="jdbc:mysql://localhost:3306/databaseName"/>

在servlet中使用Datasource(伪代码)

@WebServlet("/LoginHandle")
public class LoginHandle extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Resource(lookup="jdbc/testDB")
    private DataSource ds;

    ...

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

   Connection c = ds.getConnection();
   ...