- ふみ
- 会議室デビュー日: 2003/10/11
- 投稿数: 11
|
投稿日時: 2003-10-11 19:19
いつもお世話になっております。
JSTLのSQLタグライブラリを使ってjavax.sql.DataSourceインスタンス
を取得しようとしているのですが、
------------------------------------
org.apache.jasper.JasperException: <driver> で、
無効なドライバ・クラス名を指定しました: "oracle.jdbc.driver.OracleDriver"
------------------------------------
といったエラーが発生してしまいます。
原因としてどのようなことが考えられるでしょうか。
環境は以下の通りです。
<環境>
Windows XP Professional
JSDK1.4.2
Eclipse2.1.1(Tomcat Launcher Plugin)
Jakarta Taglib Standard 1.0.4
Tomcat4.1.27
Oracle8i
※WEB-INF/libにはclasses12.zip(Oracle JDBCドライバー)を置いています。
| コード: |
|
<リクエストしたJSP>
<%@ page pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql"%>
<html>
<head></head>
<body>
<c:if test="${dbq == null}">
<sql:setDataSource
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:test"
user="scott" password="tiger"
var="dbq"
scope="application"/>
</c:if>
</body>
</html>
|
| コード: |
|
<エラー内容>
org.apache.jasper.JasperException: <driver> で、無効なドライバ・クラス名を指定しました: "oracle.jdbc.driver.OracleDriver"
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2416)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:601)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)
|
長くなってしまいましたが、
お気づきの点などありましたらご指摘ください。
よろしくお願いします。
|
- 山本 裕介
- ぬし
- 会議室デビュー日: 2003/05/22
- 投稿数: 2415
- お住まい・勤務地: 恵比寿
|
投稿日時: 2003-10-11 23:30
恐らく JSTL が読み込まれれているクラスローダの階層に Oracle の JDBC ドライバがないのでしょう。
Tomcat の起動時のクラスパスに JDBC ドライバを通すか、JSTLの jar ファイルを WEB-INF/lib にもってくるかのどちらかでいけそうです。
|
- ふみ
- 会議室デビュー日: 2003/10/11
- 投稿数: 11
|
投稿日時: 2003-10-15 05:45
インギさん
返信ありがとうございます。
| 引用: |
|
Tomcat の起動時のクラスパスに JDBC ドライバを通すか、JSTLの jar ファイルを WEB-INF/lib にもってくるかのどちらかでいけそうです。
|
WEB-INF/libと%TOMCAT_HOME%/shared/libの両方に
JDBCドライバとJSTLのjar一式を置いてやってみたのですが、
同じエラーが出ました。
うーん、よくわからないです ^^;
JSTLのお勉強だったのと、実際のプロジェクトで
SQLタグはおそらく使わないと思いますので、
とりあえず降参します
ありがとうございました。
|
- uk
- ぬし
- 会議室デビュー日: 2003/05/20
- 投稿数: 1155
- お住まい・勤務地: 東京都
|
投稿日時: 2003-10-15 15:23
Oracleのドライバの拡張子をjarに変えるか、jarが拡張子のドライバをダウンロードして
使ってみてください。
|
- ふみ
- 会議室デビュー日: 2003/10/11
- 投稿数: 11
|
投稿日時: 2003-10-15 16:51
こんにちは。
ukさん、返信ありがとうございます。
| 引用: |
|
ukさんの書き込み (2003-10-15 15:23) より:
Oracleのドライバの拡張子をjarに変えるか、jarが拡張子のドライバをダウンロードして
使ってみてください。
|
拡張子をjarに変更することで問題なく実行することができました。
この後検索してみたのですが、
「Tomcat3ではzipでもロードしてくれたけど、
Tomcat4からはzipはロードしてくれなくなった。」
といった記事を見つけました。
この拡張子によってロードする、しないは
Servlet APIの仕様なのか、あるいはServletコンテナの
実装依存なのかはわかりませんが、
勉強になりました。
ありがとうございました。
|
- 山本 裕介
- ぬし
- 会議室デビュー日: 2003/05/22
- 投稿数: 2415
- お住まい・勤務地: 恵比寿
|
投稿日時: 2003-10-15 17:10
>拡張子をjarに変更することで問題なく実行することができました。
なるほど。拡張子の問題だったんですね。きづきませんでした。
#Tomcat の起動時のクラスパスに JDBC ドライバを通してもうまくいかなかったのは謎ですが?
>この拡張子によってロードする、しないは
>Servlet APIの仕様なのか、あるいはServletコンテナの
気になってServletAPI2.2〜2.4の仕様を確認しましたが、.jar ファイルだけをパスに通すのが正解のようです。特に 2.2 から 2.3 にかけて仕様がかわったこともないようです。
->servlet2_2-spec.pdf より
The contents of the WEB-INF directory are:
• /WEB-INF/web.xml deployment descriptor
• /WEB-INF/classes/* directory for servlet and utility classes. The classes in this directory are used by the application class loader to load classes from.
• /WEB-INF/lib/*.jar area for Java ARchive files which contain servlets, beans, and other utility classes useful to the web application. All such archive files are used by the web application class loader to load classes from.
|
- ふみ
- 会議室デビュー日: 2003/10/11
- 投稿数: 11
|
投稿日時: 2003-10-15 17:26
こんにちは。
| 引用: |
|
#Tomcat の起動時のクラスパスに JDBC ドライバを通してもうまくいかなかったのは謎ですが?
|
Tomcat起動スクリプトの中でクラスパスを設定すれば、
実行できたのかもしれません。
これに関しては、私はテストしませんでした。
ただ単に%TOMCAT_HOME%/shared/libにJDBCドライバー(.zip)を置いて
起動しただけでした。
| 引用: |
|
->servlet2_2-spec.pdf より
The contents of the WEB-INF directory are:
• /WEB-INF/web.xml deployment descriptor
• /WEB-INF/classes/* directory for servlet and utility classes. The classes in this directory are used by the application class loader to load classes from.
• /WEB-INF/lib/*.jar area for Java ARchive files which contain servlets, beans, and other utility classes useful to the web application. All such archive files are used by the web application class loader to load classes from.
|
なるほど。
調べていただいてありがとうございます。
Oracle社もzip拡張子はやめて、jarに統一して欲しいなあ
と思うのは私だけでしょうか
|