【问题标题】:Tomcat 7 - overriding context.xmlTomcat 7 - 覆盖 context.xml
【发布时间】:2013-02-28 08:40:51
【问题描述】:

我工作的公司托管了一些 Java Web 应用程序。我们在同一个盒子上有生产站点和演示站点。演示站点通常是生产环境的副本,只有资源指向演示资源(使用 javax.sql.DataSource 的数据库和领域)。出于安全考虑,appBase 没有在 webapp 目录中定义,而是在服务器的其他地方定义。

我正在将这些应用程序从 Tomcat 5 迁移到 Tomcat 7。Tomcat 5 服务器在 server.xml 中定义了所有上下文。这非常方便,因为我只需要将文件复制到主机定义的目录中,生产主机、演示主机或两者都可以,并且 context.xml 文件将被 server.xml 覆盖。

我为 Tom7 阅读的文档强调,不再推荐这种将上下文放置在 server.xml 中的安排。

设置服务器的最佳方法是什么,以便我可以覆盖 META-INF 目录中包含的 context.xml。我希望能够将 web 应用程序从测试(不是 jar 文件)复制到正确的目录(生产或演示),服务器将分别使用生产数据库或演示数据库。

  1. 我在 conf/Catalina/'host' 中定义了 context.xml 目录,将其重命名为 ROOT.xml。我启动了服务器,它加载了 ROOT.xml 文件,当我测试它时,我收到了“404”。
  2. 我将 ROOT.xml 更改为 context.xml.default 在 conf/Catalina/'host' 目录并重新启动服务器。这 似乎对宿主没有影响;它使用了数据定义 在 META-INF/context.xml 中定义。
  3. 我从 conf/Catalina/'host' 中删除了 context.xml.default 目录并重新启动服务器。正如预期的那样,它使用了数据 META-INF/context.xml 中定义的定义。

感谢您的帮助。

【问题讨论】:

    标签: tomcat7 context.xml


    【解决方案1】:

    通常您的项目在版本控制下,但您不喜欢在版本控制下拥有实时连接密码/电子邮件-smtp-密码。

    因此,您将context.xml 置于webapp/META-INF/context.xml 的版本控制下,并使用changeme 之类的虚拟密码。 部署后webapp/META-INF/context.xml 中找到具有copyXML 属性的Web 应用,webapp/META-INF/context.xml复制$TOMCAT_BASE/conf/Catalina/localhost/webapp.xml 如果不存在 .

    所以你可以在$TOMCAT_BASE/conf/Catalina/localhost/webapp.xml中部署后更改changeme密码。这样你就可以确定这些了

    • 实时密码永远不受版本控制和
    • 部署不会覆盖实时密码。

    使用TOMCAT_BASE/conf/context.xml 仅用于全局配置(如果您阅读了文件中的注释):

    <!-- The contents of this file will be loaded for each web application -->
    

    【讨论】:

      猜你喜欢
      • 2013-01-14
      • 2013-01-19
      • 2013-05-07
      • 1970-01-01
      • 2015-09-09
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      相关资源
      最近更新 更多