如何在没有 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?