- - PR -
JSPからMySQLへのConnectを行う関数を呼び出すとエラーになる
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 | ||||
|
投稿日時: 2006-05-19 10:56
エラーメッセージをよく読みましょう。 | ||||
|
投稿日時: 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への要求を出す場合に、このほかの設定が必要なのか、 また別の要因が考えられるのか、なんとも考えが及ばなくて。 すみませんが、何か少しでも思い当たることとかありましたら ご教授よろしくお願い致します。インターネット等でも調べてみたりもしていますが 八方塞で本当に困っています。 | ||||
|
投稿日時: 2006-05-19 11:35
はじめまして。宜しくお願いします。
JSPを介しないとはどいうことでしょうか?サーブレットなら成功する ということでしょうか?それともスタンドアローンなアプリで試された のでしょうか? また、CLASSPATHの設定はどうやっているのでしょうか? | ||||
|
投稿日時: 2006-05-19 11:45
ちょま吉さん コメントありがとうございます。
こちらこそよろしくお願い致します。
スタンドアローンなアプリということになるの・・・かもしれませんが 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 ] | ||||
|
投稿日時: 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に置いたりするのは最後の手段ですね。 | ||||
|
投稿日時: 2006-05-19 13:25
あしゅさん コメントありがとうございます。
上記の作業をしたところ、うまく動いてくれました!!! ありがとうございます。 CLASSPATHの環境変数はまだ行っていませんが 教えていただいたサイト等を参考に改善しておこうと思います。 あしゅさん、ちょま吉さん、貴重なお時間ありがとうございました。 |
1