【发布时间】: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