如何使用 docbase Root 从 server.xml 读取上下文参数

Posted

技术标签:

【中文标题】如何使用 docbase Root 从 server.xml 读取上下文参数【英文标题】:How to read context parameter with docbase Root from server.xml 【发布时间】:2014-03-18 16:21:06 【问题描述】:

当我尝试通过 server.xml 访问数据源并将 docbase 设置为我的应用程序时。它工作完美。但是,如果我尝试通过 docBase=root 和 path="" 访问它,它就不会被访问。我正在使用Tomcat

    <Context docBase="Configurator" path="/configurator" reloadable="true" source="org.eclipse.jst.jee.server:Configurator">
      <Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxActive="10" maxIdle="4" name="jdbc/DB" password="xyz" type="javax.sql.DataSource" url="jdbc:sqlserver://xxx.xx.xx.xx:1433;DatabaseName=23" username="sa"/>
    </Context>


  <Context path="" docBase="ROOT" reloadable="true" crossContext="true" override="true">
   <Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxActive="10" maxIdle="4" name="jdbc/Db2" password="xyz@123" type="javax.sql.DataSource" url="jdbc:sqlserver://xxx.xx.xx.xx:1433;DatabaseName=Real23" username="sa"/>
</Context>

我无法通过下面的代码访问第二个值“Db2”-

try 
    Context initContext;
    initContext = new InitialContext();
    DataSource o = (DataSource)initContext.lookup("java:/comp/env/jdbc/Db2");
    System.out.println(o.toString());
 catch (Exception e) 
    // TODO Auto-generated catch block
    e.printStackTrace();

谁能建议我应该怎么做才能从 server.xml 访问这些元素,其中 docbase 是 tomcat 中的根目录。

【问题讨论】:

【参考方案1】:

我不完全确定您要做什么。有两种可能:

    您正在尝试在 root war 下部署 JNDI 资源。 您正在尝试将 JNDI 资源全局部署到所有 Web 应用程序上下文。

如果是前者,那么这永远不会按设计工作。上下文是根上下文这一事实使分层 URL 结构看起来相关,但事实并非如此。根 webapp 就像另一个其他 web 应用程序一样。因此,有关类加载器和资源隔离的规则适用。根上下文/Web 应用程序不以任何方式“高于”其他上下文/Web 应用程序,因此不允许以这种方式共享资源。

如果您试图使资源对所有应用程序都是全局的,那么不要将它放在上下文中,而是在 Tomcat 中使其成为全局的。 Tomcat 有一个全局的context.xml,它在运行时被合并到内存中的每个 Web 应用程序中。我想你也可以直接放在server.xml&lt;GlobalNamingResources&gt;下。有关详细信息,请参阅此处的 Tomcat 文档:http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html

【讨论】:

谢谢!我属于第 2 种可能性,您的解释帮助很大。

以上是关于如何使用 docbase Root 从 server.xml 读取上下文参数的主要内容,如果未能解决你的问题,请参考以下文章

Django - serve() 得到了一个意外的关键字参数“documuent_root”

配置Tomcat虚拟主机-2

[PWA] 11. Serve skeleton cache for root

tomcat配置 项目部署 只能配置一个?

13.tomcat的各种配置,如何配置docBase

Spring Boot 打war包并利用docBase指定根目录为打包的工程