- PR -

JSPからMySQLへのConnectを行う関数を呼び出すとエラーになる

1
投稿者投稿内容
ringo
会議室デビュー日: 2006/05/12
投稿数: 16
投稿日時: 2006-05-19 10:26
JSPからMySQLへ接続させようとしているのですがうまくいきません。
Javaのテストプログラム(JSPからの呼び出しではない)を作成し、
Connect,Select,Close すべて動作することは
確認済みの関数なのですが、JSPからその関数を呼び出すとConnectに失敗してしまいます。

どなたか解決法をご存知ないでしょうか?


エラー発生時のスタックトレースは次の通りです。
------------------------------------------------------------
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1383)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1230)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at dbAccessManager.DBAccess.connect(DBAccess.java:41)
at loginManager.LoginDBAccess.getUserName(LoginDBAccess.java:38)
at loginManager.LoginWorker.login(LoginWorker.java:97)
at loginManager.LoginServlet.service(LoginServlet.java:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:184)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:833)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:732)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:619)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:688)
at java.lang.Thread.run(Unknown Source)

------------------------------------------------------------

dbAccessManager.DBAccess.connect(DBAccess.java:41) あたり は以下の通りです。
38 System.out.println("--- DBAccess connect");
39
40 // ドライバを読み込み
41 Class.forName("com.mysql.jdbc.Driver");
42
43 System.out.println("--- DBAccess ドライバの読み込み完了");



JDBCドライバは mysql-connector-java-3.1.12-bin.jar を使用しています。
MySQLへはコマンド入力で直接アクセスすることは可能で、DB及びTABLEも作成済みです。

動作環境 WindowsXP
      eclips2.1
      j2sdk1.4.2_04
      Tomcat 5.0

あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-05-19 10:56
引用:

ringoさんの書き込み (2006-05-19 10:26) より:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver


エラーメッセージをよく読みましょう。
ringo
会議室デビュー日: 2006/05/12
投稿数: 16
投稿日時: 2006-05-19 11:07
あしゅ さん。
コメントありがとうございます。

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

一応エラーは見たのですが、なぜこのエラーが出て
connect(ドライバの読み込み)が出来ないのか分からないのです。
すみません。

前述のように、JSPを介しないドライバを作成して同関数を呼び出した
場合にはドライバの読み込みは成功します。
また、JDBCドライバは mysql-connector-java-3.1.12-bin.jar への
CLASSPATHも設定しております。

JSPからMySQLへの要求を出す場合に、このほかの設定が必要なのか、
また別の要因が考えられるのか、なんとも考えが及ばなくて。

すみませんが、何か少しでも思い当たることとかありましたら
ご教授よろしくお願い致します。インターネット等でも調べてみたりもしていますが
八方塞で本当に困っています。
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2006-05-19 11:35
はじめまして。宜しくお願いします。
引用:

ringoさんの書き込み (2006-05-19 11:07) より:
前述のように、JSPを介しないドライバを作成して同関数を呼び出した
場合にはドライバの読み込みは成功します。
また、JDBCドライバは mysql-connector-java-3.1.12-bin.jar への
CLASSPATHも設定しております。


JSPを介しないとはどいうことでしょうか?サーブレットなら成功する
ということでしょうか?それともスタンドアローンなアプリで試された
のでしょうか?
また、CLASSPATHの設定はどうやっているのでしょうか?
ringo
会議室デビュー日: 2006/05/12
投稿数: 16
投稿日時: 2006-05-19 11:45
ちょま吉さん コメントありがとうございます。
こちらこそよろしくお願い致します。

引用:

ちょま吉さんの書き込み (2006-05-19 11:35) より:
JSPを介しないとはどいうことでしょうか?サーブレットなら成功する
ということでしょうか?それともスタンドアローンなアプリで試された
のでしょうか?
また、CLASSPATHの設定はどうやっているのでしょうか?



スタンドアローンなアプリということになるの・・・かもしれませんが
JSPを介しない、というのは 関数の呼び出しをJSPではなく
LoginDBAccessUnit.javaというメイン関数を有するクラスを
作成して、そこから呼び出してみる、ということをやってみました。
対象として呼び出す関数は JSPが呼び出そうとしている関数と同じです。
JSPのリクエストをサーブレットが受けて、そのサーブレットが
今回エラーとして指し示した
dbAccessManager.DBAccess.connect(DBAccess.java:41)
この処理をしている関数を呼び出しています。
説明が下手ですみません。

Eclipsの傘の中で、成功しているだけなので、もしかしたら
JSPなどから呼び出した場合と設定が違うのかも?と疑ってみて
JDBCのCLASSPATHを設定したのですが、(以下)

[コントロールパネル]-[システム]-[環境変数]-[ユーザ環境変数] に
新規に CLASSPATH という項目を作成し、以下のパスを設定しました。
  C:\j2sdk1.4.2_04\lib\JDBC;C:\j2sdk1.4.2_04\lib\JDBC\mysql-connector-java-3.1.12-bin.jar

最初 C:\j2sdk1.4.2_04\lib\JDBC でうまくいかなかったので、
ちょっと自棄でC:\j2sdk1.4.2_04\lib\JDBC\mysql-connector-java-3.1.12-bin.jarも
足してみたのですがダメでした。(T-T)

もしかしてこの設定が間違っていたり・・・?

済みませんがご教授よろしくお願い致します。

[ メッセージ編集済み 編集者: ringo 編集日時 2006-05-19 11:48 ]
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-05-19 12:19
mysql-connector-java-3.1.12-bin.jarを${CATALINA_HOME}/common/libに置きましょう。
${CATALINA_HOME}はTomcatのホームディレクトリです。

環境変数でのCLASSPATH設定はあまり好ましくありません。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/classpath.html

#WindowsサービスとしてTomcatを動かす場合はユーザー環境変数は効きません。

J2EEコンテナ(Tomcatも含む)の場合はJVMオプションで直接クラスパスを指定すると
嫌な挙動をすることが多いのでコンテナが提供していう方法で設定する方がいいですよ。
${java.home}/jre/lib/extに置いたりするのは最後の手段ですね。
ringo
会議室デビュー日: 2006/05/12
投稿数: 16
投稿日時: 2006-05-19 13:25
あしゅさん コメントありがとうございます。

引用:

あしゅさんの書き込み (2006-05-19 12:19) より:
mysql-connector-java-3.1.12-bin.jarを${CATALINA_HOME}/common/libに置きましょう。
${CATALINA_HOME}はTomcatのホームディレクトリです。



上記の作業をしたところ、うまく動いてくれました!!!
ありがとうございます。
CLASSPATHの環境変数はまだ行っていませんが
教えていただいたサイト等を参考に改善しておこうと思います。

あしゅさん、ちょま吉さん、貴重なお時間ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)