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

2022-08-31 08:48:03

我只是想知道你什么时候/为什么会在你的文件中定义一个元素?<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>

答案 1

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

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

所以事情是这样的:假设你想查找名称。容器发现 web.xml 具有 的元素,因此它将查看特定于容器的配置,其中包含类似于以下内容的内容:java:comp/env/jdbc/primaryDB<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具有将开发人员角色与部署者角色分开的优点。换句话说,作为开发人员,您不必知道在生产中实际调用了哪些所需的资源,并且作为部署应用程序的人员,您将有一个很好的名称列表来映射到实际资源。


答案 2

推荐