3

JSFアプリケーションで作業し、Beanを使用してデータベースに対していくつかの資格情報をチェックしてユーザーを認証するページにアクセスします。

ページのロード時に Tomcat エラーが発生します。

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:188)
DB.init(DB.java:27)
Login.<init>(Login.java:19)

完全なログはこちら

をダウンロードしmysql-connector-java-5.1.24-bin.jarて、ビルド パスに追加しました。次のようなプロパティ ファイルの形式で詳細を読み込んでいます。

jdbc.url=jdbc:mysql://127.0.0.1:3306
jdbc.user=root
jdbc.password=
jdbc.driver=com.mysql.jdbc.Driver

ログインまたは DB ファイルで問題なく実行できるimport com.mysql.jdbc.Driverため、Web アプリでクラスの読み込みに問題がある理由がわかりません。

DB.java ファイルは次のとおりです。

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DB {

private static String url;
private static String username;
private static String password;

public static void init() throws IOException, ClassNotFoundException{

    Properties props = new Properties();
    FileInputStream in = new FileInputStream("/home/dan/workspace/DeutschAkademie/WebContent/db.prop");
    props.load(in);

    String driver = props.getProperty("jdbc.driver");
    url = props.getProperty("jdbc.url");
    username = props.getProperty("jdbc.username");
    password = props.getProperty("jdbc.password");

    if(username == null) username = "";
    if(password == null) password = "";
    Class.forName(driver);

}

public static Connection getConnection () throws SQLException {
    return DriverManager.getConnection(url, username, password);
}

}

私のプロジェクトディレクトリ:

 .
├── build
│   └── classes
│       ├── DB.class
│       ├── Login.class
│       └── User.class
├── database.sql
├── mysql-connector-java-5.1.24-bin.jar
├── src
│   ├── DB.java
│   ├── Login.java
│   └── User.java
└── WebContent
    ├── add-user.xhtml
    ├── css
    │   ├── bootstrap.min.css
    │   ├── button.css
    │   ├── font-awesome.css
    │   ├── font-awesome-ie7.min.css
    │   ├── font-awesome.min.css
    │   ├── global.css
    │   └── typography.css
    ├── css.xhtml
    ├── db.prop
    ├── font
    ├── history.xhtml
    ├── home.xhtml
    ├── login.xhtml
    ├── META-INF
    │   └── MANIFEST.MF
    ├── navbar.xhtml
    ├── test.xhtml
    ├── WEB-INF
    │   ├── faces-config.xml
    │   ├── inc
    │   ├── lib
    │   │   ├── javax.faces-2.1.9.jar
    │   │   └── mysql-connector-java-5.1.24-bin.jar
    │   └── web.xml
    └── words.xhtml
4

3 に答える 3

5

ドライバーの jar ファイルが既に$TOMCAT_HOME/libまたはmyapp/WEB-INF/libに配置されていると確信している場合、問題の他の原因はタイミングの問題です。メソッドの実行時に、init()すべてのクラスがロードされていない可能性があります。

この点を証明するために、別の機会にドライバ クラスのロードをテストできますか (たとえば、ドライバ クラスをロードするダミーのテスト サーブレットを作成します)。動くならタイミングの問題

于 2013-04-29T00:21:20.537 に答える
0

私も同様の問題に直面していましたが、MySql Connector jarファイルをlibフォルダーにコピーするとうまくいきました。ありがとう!

于 2015-11-24T15:51:16.217 に答える