部署 WAR 文件会在 Tomcat 上给我一个 404 状态码?

Posted

技术标签:

【中文标题】部署 WAR 文件会在 Tomcat 上给我一个 404 状态码?【英文标题】:Deploying a WAR file gives me a 404 Status Code on Tomcat? 【发布时间】:2011-03-22 20:43:16 【问题描述】:

我对 Tomcat 相当陌生。我只是设法构建了一个项目并将其导出为 WAR 文件。我尝试手动将 WAR 文件复制到 Tomcat 文件夹,然后重新启动。它创建了文件夹结构和所有内容,但是当我尝试访问应用程序时得到 404 状态代码。我尝试通过 Tomcat 管理面板部署它,但我看到了相同的行为。我做错了什么?

【问题讨论】:

你的request.getContextPath()给你什么?你在这样做吗http://localhost:8080/ContextPath/(其中 contextPath 是 request.getContextPath()。如果你是,那么请检查你的 web.xml 以了解你的配置。 对不起,这是一个愚蠢的问题:如果我无法部署应用程序,此时我该如何执行它? 查看日志文件。部署应用时可能会出现异常。 您是否正确配置了默认页面。否则尝试页面/myapp/page.jsp的完整路径,或者任何适当的扩展名.jsf.html... 如果是 springboot 应用程序检查应用程序类是否扩展 SpringBootServletInitializer 这解决了我的错误 【参考方案1】:

你试过了吗

localhost:8080/app

假设您的战争文件是 app.war?

编辑评论——然后你的 web.xml 搞砸了。

【讨论】:

是的...这给了我 404 代码。如果我只尝试localhost:8080 它会给我介绍页面...【参考方案2】:

我最好的猜测是您没有在 web.xml 中配置欢迎文件。如果你去 /app/ 你需要有一些可用的默认文件。通常,人们要么创建 index.html,要么拥有欢迎文件设置来将用户指向正确的 jsp。

【讨论】:

【参考方案3】:

假设您拥有 Tomcat 安装的完全权限,请尝试转到 http://localhost:8080/manager/html/,如果您不知道进入该区域的密码,请在您的 $tomcat-installation/conf 目录中查找 tomcat-users.xml 文件,然后那应该有它。如果其中没有条目,那么您将需要向其中添加如下条目:

<user username="username" password="password" roles="admin,manager" />

查看您的应用程序是否显示在该屏幕中,如果出现,请单击链接并查看是否可以将您带到任何地方。如果没有,那么我建议遵循 ifishers 的建议,并查看日志文件以查看是否列出任何错误。

但长话短说,很可能您项目的web.xml 出了问题

【讨论】:

我也面临同样的问题,但仅在第一次作为根应用程序部署应用程序期间。如果我重新启动服务器,那么我可以访问应用程序的登录页面。尝试了您的方法,单击 URL“localhost:8080/manager/html/".....Any 知道我做错了什么??【参考方案4】:

我也有同样的问题。 我的问题是我的应用程序名称和战争文件名不同。 我已将 war 文件名更改为我的应用程序名称。

在这里,当您的应用程序被部署时,tomcat 会自动提取您的同名war 文件。在我的情况下,我的服务名称是 my-web-service(即https://localhost:8080/my-web-service/),我的战争文件名称是 MY-java-connector-0.0.1-SNAPSHOT.war(这是我的项目文件夹名称)。现在 tomcat 正在寻找 my-web=service 文件夹,它找到了 epicor-java-connector-0.0.1-SNAPSHOT 文件夹。所以将文件夹重命名为 my-web=service.war 并且它正在工作。

【讨论】:

为了避免这种情况,也许你可以在你的 pom.xml app-name 中尝试在 build 标记内,然后你的目标文件将重命名为这个 app-name你定义的。【参考方案5】:

我有同样的问题,我的问题是我通过 sftp 将文件直接复制到 tomcat 的 webapps 目录中,这可能导致轮询问题导致它无法正确部署。 Tomcat 监视 webapps 目录,当它看到 .xml 时,它会破解并做它的事情,问题是可能所有内容都还没有被复制。 :(

最好创建一个临时文件夹,将战争移动或复制到该文件夹​​,然后使用 linux mv 命令将其移动到 webapps - mv 是原子的,因此在操作完成之前tomcat不会做任何事情。

魔法。

归功于我在 javarance 上发现的一个非常随机的帖子,这又导致:http://pub.admc.com/howtos/tomcat/ch02.html#stagedir-section

希望这对其他人有帮助:)

【讨论】:

【参考方案6】:

我在使用 tomcat 时遇到了同样的问题,只是通过强制我的 IDE 创建一个 web.xml 文件来修复它。我的不见了。它会部署项目,但我仍然会收到 404 错误。我阅读了其中几个教程,但无济于事。我在某处读到需要正确配置 web.xml 文件。去找WEB-INF文件夹下的web.xml,没有文件夹,也没有web.xml文件。我在谷歌上快速搜索了如何使用我的 IDE 进行创建,然后使用 web.xml 输出编译了我的程序,它为我解决了这个问题。希望有帮助。干杯!

【讨论】:

【参考方案7】:

我也遇到过这个问题。

我的简单迂回解决方案是更改 docBase 路径。

问题发生在

docBase=".../tomcat/webapps/app_name.war";

问题解决了

docBase=".../tomcat/webapps/app_foldername/web"

【讨论】:

【参考方案8】:

FWIW 我遇到了这个问题,并通过发现我访问了错误的主机来解决它,比如“http://wronghost:8080/why_is_this_war_not_there”所以如果它在 catalina.out/localhost.*.out 中显示“XX.war 成功部署”,那可能是给追随者的提示。

【讨论】:

【参考方案9】:

最近,如果 JAVA_HOME 指向的 Java 版本比 WAR 中的代码更早,则可能会发生这种情况。 Tomcat 可能会使用 JAVA_HOME 来确定它在 Tomcat 的 BIN 目录中运行 startup.bat 后显示的 JRE_HOME。虽然 Tomcat 可能对它获得的 Java 版本感到满意,但对于应用程序来说,这可能还不够。在我的例子中,Tomcat 8.0.49 在 JDK1.7 上运行良好,而应用程序根本没有初始化(是的,它是一个 Spring Boot 应用程序,WAR 正在被解包,但仅此而已)——没有给出任何错误。将JAVA_HOME设置为JDK1.8的位置后,问题就解决了。

【讨论】:

我刚刚遇到了这个问题。使用JDK1.8构建的更新战争无意中部署在运行JDK1.7的旧环境中。【参考方案10】:

如果您像我一样使用 Spring-Boot 创建您的 WAR 文件,请确保将以下内容添加到您的主应用程序文件中。

@SpringBootApplication
public class serverTestApplication extends SpringBootServletInitializer 


    public static void main(String[] args) 
        SpringApplication.run(serverTestApplication.class, args);
    

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) 
        return builder.sources(serverTestApplication.class);
    

我被困了一段时间,看了几十个指南。这是最终向我展示我从未正确配置我的应用程序的视频: https://www.youtube.com/watch?v=05EKZ9Xmfws

【讨论】:

【参考方案11】:

如果您尚未创建任何欢迎页面,例如 index.html JSP 或其他任何内容,请创建一个。项目必须有一个索引页。我刚刚创建了一个说 index.html 并且问题解决了..???

【讨论】:

【参考方案12】:

我遇到了同样的问题。在我的情况下,日志文件中没有错误,我定义了一个欢迎页面,它列在 Tomcat 管理器 webapp 中,它在我的开发机器上部署并运行良好。但是,访问 http://example.com/myApp 的应用程序只是返回了 404 错误。

原来问题出在 Apache 配置中。 Apache 没有挂载点,因此它不知道将这些请求代理到 Tomcat。

添加适当的指令解决了问题:

ProxyPass /myApp ajp://127.0.0.1:8009/myApp

【讨论】:

以上是关于部署 WAR 文件会在 Tomcat 上给我一个 404 状态码?的主要内容,如果未能解决你的问题,请参考以下文章

服务器 tomcat 未部署最新的 WAR 更改

在tomcat服务器中部署war文件

在tomcat管理界面部署war包项目失败

如何部署war包到tomcat

Tomcat没有自动部署war文件

如何在部署后更新WAS Liberty中的配置文件可以不像Tomcat Web服务器吗?