Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java web.xml中的资源引用用于什么?_Java_Web.xml_Resource Ref - Fatal编程技术网

Java web.xml中的资源引用用于什么?

Java web.xml中的资源引用用于什么?,java,web.xml,resource-ref,Java,Web.xml,Resource Ref,我只是想知道您什么时候/为什么要在web.xml文件中定义元素 我原以为它会在web/app服务器中使用JNDI定义,然后在Java代码中查找JNDI引用 资源引用定义对我来说似乎有点多余,我想不出它什么时候有用。例如: 主数据库 jdbc/primaryDB javax.sql.DataSource 容器 您始终可以通过容器中配置的JNDI名称直接引用应用程序中的资源,但如果这样做,基本上就是将特定于容器的名称连接到代码中。这有一些缺点,例如,如果您以后出于某种原因想要更改名称,则需要更新所

我只是想知道您什么时候/为什么要在
web.xml
文件中定义
元素

我原以为它会在web/app服务器中使用JNDI定义,然后在Java代码中查找JNDI引用

资源引用定义对我来说似乎有点多余,我想不出它什么时候有用。例如:


主数据库
jdbc/primaryDB
javax.sql.DataSource
容器

您始终可以通过容器中配置的JNDI名称直接引用应用程序中的资源,但如果这样做,基本上就是将特定于容器的名称连接到代码中。这有一些缺点,例如,如果您以后出于某种原因想要更改名称,则需要更新所有应用程序中的所有引用,然后重新生成并重新部署它们

引入了另一层间接寻址:指定要在web.xml中使用的名称,并根据容器的不同,在特定于容器的配置文件中提供绑定

因此,下面是发生的情况:假设您想查找
java:comp/env/jdbc/primaryDB
名称。容器发现web.xml有一个用于
jdbc/primaryDB
元素,因此它将查看特定于容器的配置,该配置包含类似于以下内容:


jdbc/primaryDB
jdbc/primarydbinetainer
最后,它返回注册名为
jdbc/primarydbinetainer
的对象


想法是在web.xml中指定资源具有将开发人员角色与部署人员角色分开的优势。换句话说,作为开发人员,您不必知道在生产中实际调用了哪些所需资源,作为部署应用程序的人员,您将拥有一个很好的名称列表,以映射到实际资源。

IMHO,它不仅仅是分离角色。这个想法是,你不能假设服务器上有一个jndi名称,因此你需要一种方法将应用程序中使用的名称映射到部署人员选择的“真实”jndi名称上。这必须是基本的,因为我在Google中找不到它,但是如果我想查找“java:comp/env/jdbc/primaryDB”,那么res-ref名称为什么是“jdbc/primaryDB”?据我所知,“jndi名称”元素不是标准web.xml的一部分,而是特定供应商部署描述符的一部分。@RaviParekh,他提到了“特定于容器的配置”,它可能是jboss-web.xml或weblogic.xml或任何其他特定于供应商的部署描述符文件。我们可以将其与tomcat联系起来吗?我指的是tomcat中context.xml中定义的数据源和web.xml中的resource ref