【问题标题】:Tomcat always returns 404Tomcat 总是返回 404
【发布时间】:2021-08-05 08:25:15
【问题描述】:

我有一个 Spring Boot 应用程序(使用 Gradle 构建工具),我想使用 Tomcat 10 进行部署。我创建了战争,使用 Tomcat 管理器应用程序部署它(或将战争拖放到 tomcat 安装/webapps 下),然后打开它,但我总是收到 404 消息“请求的资源不可用”。
为了测试我的应用程序是否有问题,我创建了一个带有一个控制器和端点的全新演示应用程序,它应该返回一个字符串。这也不起作用。
然后我尝试按照教程(https://www.youtube.com/watch?v=OEx_V1q04tg&ab_channel=DailyCoding)进行操作。我一步一步地跟着它,但我仍然总是得到 404 响应。
我也尝试在其他地方寻求帮助(例如这里,https://www.codejava.net/java-ee/servlet/solved-tomcat-error-http-status-404-not-found),但没有帮助。
这是我的演示应用 build.gradle:

plugins {
    id 'org.springframework.boot' version '2.4.5'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'war'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '8'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}

test {
    useJUnitPlatform()
}

这里是 DemoApplication.java:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(DemoApplication.class);
    }
}

控制器:

package com.example.demo.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {

    @RequestMapping("/")
    public String sayHello() {
        return "Hello from DemoApplication!";
    }
}

感谢任何帮助。

【问题讨论】:

  • 更准确地说:Tomcat 10.0 是 Jakarta EE 9 servlet 容器,而 Spring Web 仅适用于 Java EE 8。降级到 Tomcat 9.0 应该没问题。
  • @PiotrP.Karwasz 这有帮助!谢谢你。我切换到 Tomcat 9。
  • @PiotrP.Karwasz 我在第一条评论中提供的帖子的答案中看不到降级 Tomcat 版本的建议。我不会将此问题标记为“可能会解决您的问题的类似问题”,因为我相信第二条评论是我的解决方案。
  • 是的,你是对的,链接不是直接的,尽管在 BalusC 的答案中有一个部分 "javax.servlet.* 在 Servlet 5.0 或更高版本中不再工作" .

标签: spring-boot gradle tomcat


【解决方案1】:

要么使用@GetMapping(通常在控制器方法级别,但我猜这个类也会这样做)或使用RequestMapping(method=RequestMethod.GET)。

 @GetMapping("/")
    public String sayHello() {
        return "Hello from DemoApplication!";
    }

 @RequestMapping(method=RequestMethod.GET, "/")
    public String sayHello() {
        return "Hello from DemoApplication!";
    }

除此之外 检查您的 Tomcat 日志(请求管理器/catalina 的访问日志以寻找正确的部署)以及您的 Java 版本(同时检查您的编译器合规性)检查此https://tomcat.apache.org/whichversion.html

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 2016-02-04
    • 2014-05-29
    • 2021-07-28
    • 2015-11-23
    • 1970-01-01
    • 2011-02-08
    • 2019-02-28
    • 2020-02-03
    相关资源
    最近更新 更多