如何在没有 webapps 的情况下设置 tomcat 虚拟主机?

Posted

技术标签:

【中文标题】如何在没有 webapps 的情况下设置 tomcat 虚拟主机?【英文标题】:How to setup a tomcat virtualhost without webapps? 【发布时间】:2012-03-09 17:02:00 【问题描述】:

我正在尝试将我的 webapp 从 resin 迁移到 Tomcat7 。一件事让我感到困惑是我不知道如何为一个虚拟主机设置一个“默认”网络应用程序?

也就是说,我的网站只有一个应用程序:"/",位于“/home/destiny/www”。里面有很多 php 脚本(由 apache 提供),里面有一个 WEB-INF 目录,里面有一个标准的 JavaEE 应用程序。 My app is not packaged in WAR , it is default expanded.

我尝试查找有关如何在 tomcat 7 中设置虚拟主机的文档,但所有示例都需要一个 'webapps' 目录来扩展 WAR,但这不是我的情况!

这是我的 server.xml 设置(tomcat 7.0.23):

<Host name="myhost.com" xmlBase="/home/destiny/www" 
  unpackWARS="false" autoDeploy="true">
  <Context path="/" docBase="." />
</Host>

<!-- default tomcat's host -->
<Host name="localhost"  appBase="webapps"
  unpackWARs="true" autoDeploy="true"> ... </Host>

当我启动 tomcat 时,我看到我的 webapp 没有加载,只加载了 tomcat 的 webapps(host-manager、manager、examples、docs、ROOT ...)。当我打开我的网站时,它会显示 tomcat 的默认屏幕(带有损坏的图像)。

配置不起作用...(我尝试了 xmlBase 、 appBase 、 docBase ...但都无效)

似乎一种解决方案是/home/destiny/www/webapps/ROOT 目录中名为“ROOT”的网络应用程序,但我不想要那个解决方案!我希望我的默认网络应用程序位于 /home/destiny/www 。并且不会安装其他 webapps(我不需要 webapps dir )。

如何解决(在树脂中很容易实现)?谢谢。

【问题讨论】:

【参考方案1】:

要指向您自己的目录,请尝试以下操作:

转到tomcat文件夹%path_to_tomcat%/conf/Catalina/localhost 如果您愿意,您也可以将 localhost 更改为您的主机,但如果您只想将您的应用程序放在“/”上,那么 localhost 就可以了。

在之前定义的文件夹中创建一个名为ROOT.xml 的文件。在该文件中添加以下内容

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="/home/destiny/www">
</Context>

如果您不希望默认的 tomcat 页面存在,还请查看 %path_to_tomcat%/webapps/,并删除/移动/重命名存在的 ROOT 文件夹。

有关更多详细信息,请参阅方法 #2 @this link。

【讨论】:

【参考方案2】:

这在 Tomcat 7 中适用于我:

<Host name="myhost.com" appBase="">
  <Context path="/" docBase="/home/destiny/www"/>
</Host>

这可能不是配置 Tomcat 的最佳方式,但它可以让 web 应用程序快速运行。

【讨论】:

感谢这个例子让我在让虚拟主机在没有上下文标签的情况下工作... @Mark Horgan,有没有办法自动将管理器文件夹包含在每个虚拟主机的 webapps 中【参考方案3】:

这是一个老话题,但我想分享我的经验,因为这出现在我的搜索结果中。我的问题是升级旧的 JSP 应用程序,这些应用程序在使用 cPanel 和简单的 tomcat 7 安装的新服务器上包含子目录的文件结构中展开。子目录中的文件无法引用其他目录中的包含文件。本质上,Tomcat 为每个子目录创建了一个单独的上下文,然后我在包含时收到了很多文件未找到错误。

所以我做了马克建议的一些改变。我的服务器设置为将每个虚拟主机的 Web 文档根设置为 /home/domainuser/public_html,并且默认的 tomcat server.xml 将 appbase 和上下文文档库都设置为该目录。

所以最终起作用的是“拆分”目录路径并将部分作为应用程序库,然后将我的上下文的文档库作为 public_html 目录。请参阅下面的示例。

    <Host name="domain.com" appBase="/home/domainuser/" unpackWARs="false" deployXML="false">
      <Alias>www.domain.com</Alias>
      <Context path="" reloadable="true" docBase="public_html" debug="1"/>
   </Host>

【讨论】:

以上是关于如何在没有 webapps 的情况下设置 tomcat 虚拟主机?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Tomcat webapp 转换为 Oracle Application Server webapp?

Spring Webapp 在没有控制台日志的情况下抛出 404 错误

iPhone WebApps,有没有办法检测它是如何加载的?主屏幕与 Safari?

idea部署项目到tomcat,tomcat webapps下没有项目

如何更改tomcat7及以上版本内存设置

在预认证用户的情况下如何使用 amazon cognito 获取刷新令牌