java - web.xml 中的 resource-ref 是做什么用的?

标签 java web.xml resource-ref

我只是想知道你什么时候/为什么要定义一个 <resource-ref>你的 web.xml 中的元素文件?

我本以为它会使用 JNDI 在您的 Web/应用程序服务器中定义,然后在您的 Java 代码中查找 JNDI 引用?

resource-ref 定义对我来说似乎有点多余,我想不出它什么时候有用。示例:

<resource-ref>
  <description>Primary database</description>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>CONTAINER</res-auth>
</resource-ref>

最佳答案

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

<resource-ref>引入了另一层间接:您指定要在 web.xml 中使用的名称,并根据容器在特定于容器的配置中提供绑定(bind)文件。

那么会发生什么:假设您要查找 java:comp/env/jdbc/primaryDB姓名。容器发现 web.xml 有一个 <resource-ref> jdbc/primaryDB 的元素,因此它将查看特定于容器的配置,其中包含类似于以下内容的内容:

<resource-ref>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name>
</resource-ref>

最后返回以jdbc/PrimaryDBInTheContainer为名注册的对象.

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

关于java - web.xml 中的 resource-ref 是做什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42424774/

相关文章:

spring - 如何在 Spring 中将两个参数值放在一个上下文参数中?

xml - wildfly 不从 web.xml 加载类

java - EJB 2.1 项目中应用程序范围的资源引用

java - Spring JPA @Converter - 如何使用它自己的 id 作为盐来加密实体?

java - iOS CoreImage Android 中的即时拍照效果,如何制作?

java - 检索 ToggleGroup 名称 JavaFX

java - 无法从远程数据库获取数据

java - Java 中基于 Web 表单的登录