您可以通过容器中配置的JNDI名称直接引用应用程序中的资源,但是如果这样做,基本上是将特定于容器的名称连接到代码中。这有一些缺点,例如,如果您以后出于某种原因想更改名称,您需要更新所有应用程序中的所有引用,然后重新构建并重新部署它们。
< resource-ref>引入另一层间接:您指定要在web.xml中使用的名称,并且根据容器在特定于容器的配置文件中提供绑定。
所以这里发生了什么:让我们说你想查找java:comp / env / jdbc / primaryDB名称。容器发现web.xml有< resource-ref> jdbc / primaryDB的元素,因此它将查看特定于容器的配置,其中包含类似于以下内容的内容:
jdbc/primaryDB
jdbc/PrimaryDBInTheContainer
最后,它返回以名称jdbc / PrimaryDBInTheContainer注册的对象。
想法是在web.xml中指定资源具有将开发者角色与部署者角色分开的优点。换句话说,作为开发人员,您不必知道在生产环境中实际调用所需的资源,作为部署应用程序的人,您将有一个很好的名称列表来映射到真实资源。