应对Name jdbc is not bound in this Context-----------我的一个总结

本文提供了一种解决NamejdbcisnotboundinthisContext错误的方法,通过更改JSP文件中数据源查找方式,从直接使用initContext到先获取envContext再查找数据源,有效避免了该错误的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你肯定被这个报错惹得焦头烂额了,而且网上的所有回答都是如出一辙,你检查配置是否有问题。

你认真的看了自己的context.xml和web.xml中的配置,觉得它们正确无误。而错误依然不能消除,那么你看这篇文章就对了,也许它会是你的指路明灯。

你看一下自己的JSP文件,是否有这样一句:

DataSource ds=(DataSource)initContext.lookup("java:/comp/env/jdbc/xinabai");

请将它改为:

 Context initContext = new InitialContext();   
 Context envContext = (Context)initContext.lookup("java:/comp/env");      
DataSource ds = (DataSource)envContext.lookup("jdbc/xinbai");

虽然无数本书和帖子告诉你,这两个方法相同。但是,很明显,前一种会在某种情况下产生Name jdbc is not bound in this Context的错误。

具体原因我不清楚,希望知道原因的高人可以告知一二。

 

### 在web.xml中配置mysql-connector-javaJava Web应用程序中,`web.xml` 文件用于定义应用程序的部署描述符。尽管 `web.xml` 本身并不直接与 MySQL 驱动程序(如 `mysql-connector-java`)进行集成,但它可以通过 JNDI 数据源的方式间接配置数据库连接资源。以下是关于如何通过 `web.xml` 和 Tomcat 的 `context.xml` 或 `server.xml` 配置文件来实现 MySQL 数据库连接的具体方法。 #### 1. 配置 Tomcat 的数据源 首先需要在 Tomcat 中配置一个 JNDI 数据源。这通常通过编辑 `context.xml` 或 `server.xml` 文件完成。以下是一个示例配置: ```xml <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC" username="root" password="password" /> ``` 上述代码片段定义了一个名为 `jdbc/test` 的 JNDI 数据源[^3]。确保将驱动程序类名设置为 `com.mysql.cj.jdbc.Driver`,这是 MySQL Connector/J 8.x 的默认驱动程序类名。 #### 2. 将 MySQL 驱动添加到 Tomcat 为了使 Tomcat 能够识别 MySQL 驱动程序,必须将 `mysql-connector-java` 的 JAR 文件放置在 Tomcat 的全局类路径中。具体位置通常是 `Tomcat/lib` 目录下[^2]。如果将驱动程序放置在 Web 应用程序的 `WEB-INF/lib` 目录下,则可能导致某些情况下无法正确加载驱动程序。 #### 3. 配置 web.xml 接下来,在 `web.xml` 文件中声明对 JNDI 数据源的引用。以下是一个示例配置: ```xml <resource-env-ref> <description>DB Connection</description> <resource-env-ref-name>jdbc/test</resource-env-ref-name> <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type> </resource-env-ref> ``` 此配置告诉容器应用程序需要使用名为 `jdbc/test` 的 JNDI 数据源[^4]。注意,`resource-env-ref-name` 的值应与 Tomcat 中定义的数据源名称一致。 #### 4. 使用数据源 在 Java 代码中,可以通过以下方式获取数据源实例: ```java Context initContext = new InitialContext(); Context envContext = (Context) initContext.lookup("java:/comp/env"); DataSource ds = (DataSource) envContext.lookup("jdbc/test"); Connection conn = ds.getConnection(); ``` 上述代码展示了如何通过 JNDI 查找数据源并获取数据库连接[^1]。 ### 注意事项 - 确保 `mysql-connector-java` 的版本与使用的 MySQL 数据库版本兼容。 - 如果遇到 `Name jdbc is not bound in this Context` 错误,请检查 Tomcat 的配置文件是否正确加载了数据源。 - 如果使用的是较新的 Tomcat 版本(如 Tomcat 9),请确保 URL 参数中的 `serverTimezone` 设置为正确的时区。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值