Java Tomcat虚拟主机配置不适用于Struts操作

Java Tomcat虚拟主机配置不适用于Struts操作,java,tomcat,struts,http-status-code-404,virtual-hosts,Java,Tomcat,Struts,Http Status Code 404,Virtual Hosts,最初,我有一个名为admin running fine的webapp,部署在tomcat 6的$CATALINA_HOME/webapps/目录中。现在我试着设置一个虚拟主机来运行这个webapp 步骤1:我在$CATALINA_HOME/conf/server.xml中添加了以下内容 <Host name="mysubdomain.domain.com" appBase="keshav"> </Host> 步骤2:我创建了一个文件夹$CATALINA_HOME/ke

最初,我有一个名为admin running fine的webapp,部署在tomcat 6的$CATALINA_HOME/webapps/目录中。现在我试着设置一个虚拟主机来运行这个webapp

步骤1:我在$CATALINA_HOME/conf/server.xml中添加了以下内容

<Host name="mysubdomain.domain.com" appBase="keshav">

</Host>
步骤2:我创建了一个文件夹$CATALINA_HOME/keshav

步骤3:将根上下文创建为$CATALINA_HOME/keshav/ROOT

步骤4:将$CATALINA_HOME/webapps/中的我的管理员webapp移动到$CATALINA_HOME/keshav

现在当我访问时,打开登录页面就可以了。但当我尝试访问或任何其他struts操作时,它会给我404错误-

HTTP状态404-Servlet操作不可用

在catalina.out文件中,我得到消息INFO:Servlet操作当前不可用

有人能帮我找出这个配置中的错误吗

更新:我还将连接器端口从8080更改为80。因为打开80端口需要root权限,所以我使用sudo启动tomcat。我使用的用户在sudoers列表中

每当我用sudo运行tomcat时,struts操作的404错误就会发生。如果我将连接器端口从80更改为8080并在不使用sudo的情况下启动,则虚拟主机工作正常

如果我选择根并启动tomcat,它也可以正常工作。使用sudo似乎导致了这个问题

您是否为虚拟主机定义了上下文?看看Tomcat虚拟主机指南的一节。 根上下文不是必需的,除非您实际使用它。 “action”servlet是否映射到web.xml中的“*.do”模式?我想是的,因为你说它运行良好,但检查它从来没有什么坏处。
这是典型的ActionServlet。它将所有异常映射到UnavailableException,因此即使servlet已死亡,也始终会出现Unavailable错误。日志中应该有其他信息来显示确切的原因

在sudo中运行服务器时,环境会发生变化。struts配置可能依赖于某个环境变量或默认工作目录


试试sudo-s catalina.sh。这可能会有所帮助。

谢谢您的回复。1不,我认为我的admin webapp不需要单独的context.xml,$CATALINA_HOME/conf中的默认值就足够了2是不需要ROOT,但我正在使用它重定向到admin webapp 3是。请查看我的最新更新KeshavSo JSP甚至可以在sudo的端口80上工作,但action不能?您是否确定工作的JSP实际上来自您的虚拟主机,而不是以前运行的人工制品,例如缓存编译的JSP或来自非虚拟应用程序的JSP?运行sudo可能而且通常确实会改变您的环境,请运行“sudo-V”查看详细信息。也许类路径发生了一些奇怪的事情。。。尝试通过sudo启动Tomcat,而端口保持在8080-这将有助于缩小到sudo vs端口问题。确保启动Tomcat clean nothing in work/tmp;部署到单个位置的webapp。