【问题标题】:Application successfully deployed on Tomcat, but 404 error应用成功部署在Tomcat上,但出现404错误
【发布时间】:2023-03-04 10:35:01
【问题描述】:

经过一番努力,我在(远程)Tomcat 5.5 服务器上部署了一个网络应用程序(Turnkey Linux 自带)。它是一个带有 Java 后端的 GoogleWebToolkit 网络应用程序。

观察日志一切正常。 /manager 应用还在我的新应用上显示“running=true”。

但问题是,转到 /myApp 网址会得到 404。到目前为止,我所做的一切都没有成功:

  • 确保它确实使用 Eclipse 在本地运行,在那里工作正常
  • 查看部署服务器上的日志,成功加载了 Spring 和其他一些库。事实上,它显示的消息与我在 Eclipse 中以托管模式运行时显示的消息相同
  • /manager、/host-manager、/admin 应用程序运行良好。
  • 在 /manager 上重新加载应用程序也会显示“OK”
  • 我指定了一个欢迎文件,一个实际存在的文件,直接点击它也会给出 404
  • 我使用默认主机 ('localhost'),就像 /manager、/host-manager 和 /admin 应用程序一样
  • 在互联网上搜索了很多,但无济于事。
  • 尝试了不同的 Tomcat (v6) 服务器(我家的 ubuntu 机器,我想在其上部署的是网络上某处的 VPS),然后它就可以工作了...重新安装 VPS?

关于如何解决此问题、找出问题所在或可能导致此问题的任何提示? 会不会有冲突? $CATALINA_HOME/webapps 目录中运行了另一个应用程序,这会与部署在同一目录中的 myApp 冲突吗?

下面是我的 server.xml

<?xml version="1.0" encoding="UTF-8"?>
<Server>
  <Listener className="org.apache.catalina.core.AprLifecycleListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
  <GlobalNamingResources>
   <Environment
    name="simpleValue"
    type="java.lang.Integer"
    value="30"/>
   <Resource
     auth="Container"
     description="User database that can be updated and saved"
     name="UserDatabase"
     type="org.apache.catalina.UserDatabase"
     pathname="conf/tomcat-users.xml"
     factory="org.apache.catalina.users.MemoryUserDatabaseFactory"/>
  </GlobalNamingResources>
  <Service
  name="Catalina">
   <Connector
    port="8009"
    redirectPort="8443"
    address="127.0.0.1"
    protocol="AJP/1.3">
   </Connector>
   <Engine
    defaultHost="localhost"
    name="Catalina">
     <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
     <Host
      appBase="webapps"
      name="localhost">
     </Host>
   </Engine>
 </Service>
</Server>

【问题讨论】:

  • 您的 myApp 中的 web.xml 是否列出了欢迎文件?您可以直接尝试其中之一,例如 localhost:8080/myApp/index.html
  • 是的,它有一个欢迎文件,我也试过了,不幸的是它不起作用:(
  • 我只是尝试将应用程序部署在不同的 tomcat(这次是 tomcat 6)上,在不同的服务器上(我家的 linux 机器,tomcat5.5 是 VPS)。它在那里工作......因此它与服务器有关?我应该重新安装它吗?
  • 是否有任何机会,server.xml 是否有 myApp 的 path 属性设置为不同的 url 模式?跨度>
  • @JoseK: 不... server.xml 粘贴在上面顺便说一句!我刚刚意识到,它是 Apache 上的 Tomcat 5.5,所以我不得不修改 mod_jk.conf 来添加我的 newApp(对吗?)。好吧,修改这个并重新启动tomcat不起作用。会不会还是这个问题,修改mod_jk.conf后还有其他步骤吗?

标签: apache tomcat mod-jk


【解决方案1】:

因此,您在 Tomcat 前面有一个 Apache 实例。对 Apache 的部分/全部请求被转发到 Tomcat AJP 端口 8009。假设这个 Apache-Tomcat 桥运行正常,因此只关注您部署的应用程序,您可能需要在 Apache 的 httpd.conf 文件中添加一些 JKMount 指令,确保对/myApp url 的请求确实被转发到Tomcat。否则,它们由 Apache 提供服务,这意味着当找不到这些资源时会出现 404 错误。

【讨论】:

    【解决方案2】:

    HTTPD/conf.d 文件夹应该有各种 .conf 文件,其中包含有关配置的 Web 应用程序的条目。您可以创建一个新的.conf 文件,也可以将ProxyPass 条目添加到现有的conf 文件中。添加ProxyPass 条目可以将收到的请求路由到tomcat。例如ProxyPass /myApp/ ajp://localhost:8009/myApp/。 对于上面的例子,Tomcat 应该监听 AJP 连接器端口 8009。

    【讨论】:

      猜你喜欢
      • 2019-02-05
      • 2023-03-23
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      相关资源
      最近更新 更多