Servlets Servlet规范:<;上下文参数>;vs<;环境入口>;在web.xml中?

Servlets Servlet规范:<;上下文参数>;vs<;环境入口>;在web.xml中?,servlets,jndi,context-param,Servlets,Jndi,Context Param,为什么定义两种不同的方式(上下文参数和环境条目)来为web应用程序提供配置参数 这些方法各自的优点是什么(什么时候应该首选哪种方法)?环境条目可通过它获得,当您没有直接可用的工具时,例如在中。web.xml中的一个实际上是覆盖环境实体的优先级链中的最后一个。它们通常在服务器自己的配置中定义。因此,如果要从上的webapp覆盖服务器指定的环境条目,那么可以通过web.xml完成 上下文参数实际上是特定于webapp本身的。它们仅在您直接拥有一个时可用,通常仅在内部(并且本质上也通过${initPa

为什么定义两种不同的方式(上下文参数和环境条目)来为web应用程序提供配置参数


这些方法各自的优点是什么(什么时候应该首选哪种方法)?

环境条目可通过它获得,当您没有直接可用的工具时,例如在中。
web.xml
中的一个实际上是覆盖环境实体的优先级链中的最后一个。它们通常在服务器自己的配置中定义。因此,如果要从上的webapp覆盖服务器指定的环境条目,那么可以通过
web.xml
完成


上下文参数实际上是特定于webapp本身的。它们仅在您直接拥有一个时可用,通常仅在内部(并且本质上也通过
${initParam.someName}
in)和。它们应该用于为Web应用程序中运行的过滤器、servlet和/或侦听器提供配置参数。由JNDI提供它们没有多大意义,因为为了简单的目的,JNDI是一个过于复杂的过程。

我仍然感到困惑。例如,假设我想存储数据库连接详细信息?我应该用这两个里面的什么?我确实打算在同一个Tomcat上不止一次地安装我的应用程序。@Wouter环境条目的范围更广,适用于在该Tomcat上运行的所有web应用程序。“上下文”是单个web应用程序,映射到单个web应用程序。因此,如果您的数据库只为单个web应用提供服务,请在上下文级别执行。一种方法是在web应用程序的
META-INF
文件夹中的
context.xml
文件中编写
..
标记。至于你提到的“在同一个Tomcat上多次安装我的应用程序”,我不理解,也没有道理。@BalusC你的第一段不太清楚。如果您的意思是说环境条目的范围比上下文参数更广,那么请更明确地说。也许引用一句话:“对所有web应用程序可见”@Basil:OP问的是特定于web应用程序的
web.xml
(对其他web应用程序不可见)。@BalusC谢谢,我不理解范围界定的事实。让我觉得应用程序部署描述符对所有应用程序都是全局的,但你让我意识到我的解释是错误的。JavaEE7规范第EE.5.2.4节“环境条目的共享”确实说应用程序定义的环境条目值的作用域是该应用程序。现在我明白了,您的第一段是说,
ServletContext
需要一个servlet(当然),但是servlet并不是javaee更广阔的海洋中唯一的鱼。