Deploying a WAR file gives me a 404 Status Code on Tomcat?

Leg*_*end 29 java deployment tomcat

I am fairly new to Tomcat. I just managed to build a project and exported it as a WAR file. I tried manually copying a WAR file to the Tomcat folder then restarting. It created the folder structure and everything but I get a 404 Status code when I try to reach the application. I tried deploying it through the Tomcat Admin panel but I'm seeing the same behavior. Am I doing anything fundamentally wrong?

Tho*_*mas 11

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

<user username="username" password="password" roles="admin,manager" />
Run Code Online (Sandbox Code Playgroud)

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

但长话短说,很可能是你的项目搞砸了 web.xml


hel*_*rth 10

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


小智 6

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

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


nul*_*ull 5

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

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

魔法。

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

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


小智 5

如果您像我一样使用 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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


hvg*_*des -3

你试过了吗

localhost:8080/app
Run Code Online (Sandbox Code Playgroud)

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

编辑评论——那么你的 web.xml 就搞砸了。

  • 是的...这给了我 404 代码。如果我尝试“localhost:8080”,它会给我介绍页面...... (2认同)