gpt4 book ai didi

java - Tomcat:javax.naming.NoInitialContextException

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:53:47 25 4
gpt4 key购买 nike

我在 Tomcat 服务器上有一个带有 Java Servlet 的网络服务。在我的 Servlet 中,我使用这样的数据库池:

envContext = new InitialContext();
DataSource ds = (DataSource) envContext.lookup( "java:/comp/env/jdbc/Database" );
con = ds.getConnection();

对于初始化,我在我的 web.xml 中有这个:

<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/Database</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

然后是 context.xml,这似乎是这里的重要步骤:

<?xml version="1.0" encoding="UTF-8"?>
<!-- The contents of this file will be loaded for each web application -->
<Context crossContext="true">

<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>

<Resource name="jdbc/Database" auth="Container"
type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="user"
password="password"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/configerror_db"/>
</Context>

我读了很多其他关于这个错误的问题,但我无法解决。

首先我想解释一下,我在使用我的 linux 机器时没有遇到这个错误。因此,我在我的 Windows 机器上的 Eclipse 中安装了相同的代码,我得到了这个上下文环境错误。

其他答案说做this.

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"<initialContextFactory>");
env.put(Context.PROVIDER_URL, "<url>");
env.put(Context.SECURITY_PRINCIPAL, "<user>");
env.put(Context.SECURITY_CREDENTIALS, "<password>");
ctx = new InitialContext(env);

但我不知道 initialContextFactory 是什么AND context.xml 不应该这样做吗?正如我在 Linux 上所说的那样。

有人可以帮我吗?我错过了什么?我不想在使用数据库连接的每个文件中都写上用户名和密码。我想 hell 是的,这太棒了。凭据仅在 context.xml 中,但现在在 Windows 上它不起作用。

感谢您的任何建议。

最佳答案

你好 progNewbie,

我在 Windows 操作系统Eclipse IDE 上工作,特别是在你正在寻找的相同类型的项目上。

您需要在以下位置更新您的代码(3-更改)...

<强>1。遵循 Java 更改,

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
......
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/Database");
conn = ds.getConnection();

<强>2。同样配置 Java Web-Application 的 web.xml,

......
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/Database</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
.........

<强>3。在 Tomcat 的 server.xml 文件中做以下更改:

..................
<!-- Assume my application runs on localhost... -->
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

<Valve className=..../>

<Context docBase="...." path="..." reloadable="true" source=".....">

<!-- Assume i am using Oracle Database so that driverClass(below) Attribute's Value will be oracle.jdbc.driver.OracleDriver -->
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver"
maxActive="100" maxIdle="30" maxWait="10000" name="jdbc/Database" password="db-password"
type="javax.sql.DataSource" url="db-connection-url" username="db-user-name"
/>

</Context>

</Host>
............

已编辑:

enter image description here

让我知道如果那时仍然卡住。

关于java - Tomcat:javax.naming.NoInitialContextException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37305545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com