Java 将Resource标记放在conf/context.xml中会得到一个异常,但是当我将相同的标记放在META-INF/context.xml中时,这是可以的:为什么?

Java 将Resource标记放在conf/context.xml中会得到一个异常,但是当我将相同的标记放在META-INF/context.xml中时,这是可以的:为什么?,java,jakarta-ee,tomcat,context.xml,Java,Jakarta Ee,Tomcat,Context.xml,为了使用tomcat作为服务器连接到derby数据库,最初我在tomcat的conf/context.xml中添加了以下内容: <Resource name="jdbc/PollDatasource" auth="Container" type="javax.sql.DataSource" driverClassName="org.apache.derby.jdbc.ClientDriver" url="jdbc:derby://localhost:1527/poll database

为了使用tomcat作为服务器连接到derby数据库,最初我在tomcat的
conf/context.xml
中添加了以下内容:

<Resource name="jdbc/PollDatasource" auth="Container" type="javax.sql.DataSource"
 driverClassName="org.apache.derby.jdbc.ClientDriver"
 url="jdbc:derby://localhost:1527/poll database;create=true"
 username="suhail" password="suhail"
 maxActive="20" maxIdle="10" maxWait="-1" />
但当我运行一个必须连接到数据库的servlet时,语句:

connection = dataSource.getConnection();
引发异常:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
我还不明白这个例外的原因

异常发生后,我从Tomcat的
conf/context.xml
中删除了
Resource
标记,并将其放在我项目的
META-INF/context.xml

<resource-ref>
<description>my connection</description>
<res-ref-name>jdbc/PollDatasource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
当我再次尝试servlet时,它毫无例外地工作了

当我将
Resource
标记放在global context.xml文件(即conf/context.xml)中时,会出现异常,但当我将其放在特定于我的应用程序的context.xml中时,不会出现异常,这可能是什么原因?。(即在META-INF/context.xml内部)

添加到
conf/context.xml
将使您在服务器上部署的每个Web应用程序都可以使用该资源的副本,这可能不是您想要做的。如果您希望
在全球范围内可用,则更适合将其放入
下的
conf/server.xml


我认为您得到的错误是因为您没有将JDBC驱动程序放在正确的位置。在
conf/context.xml
中定义
可能会导致使用不同的类加载器来加载

您所说的
JDBC
驱动程序究竟是什么意思?我在tomcat的lib文件夹中有一个连接到derby数据库的驱动程序,我指的是JDBC驱动程序的JAR文件。查看您发布的另一个与此问题几乎相同的问题。需要运行的驱动程序已经就位:在Tomcat的lib文件夹中,当驱动程序位于正确的位置时,您没有告诉异常的原因……很抱歉,我无法检查您的整个配置。每次发生此错误时,检查JDBC驱动程序,如有必要,完全重新编写
定义,即可修复此问题。我还看到,稍微不匹配的JNDI名称会导致这种问题。