我有一个spring-mvc + jsp项目,可以在外部tomcat服务器上完美运行。我试图使用spring-boot和嵌入式tomcat服务器制作一个runable war文件。但是当我尝试调用GET /student时,我收到404错误,并且控制台中没有错误消息。
project screen
@Bean
public UrlBasedViewResolver setupViewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
build.gradle
plugins {
id 'org.springframework.boot' version '2.6.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'war'
}
description = 'Teaching Academy Web Application.'
ext.tomcatHome = 'D:/Soft/apache-tomcat-9.0.62'
ext.tomcatWebapps = "$tomcatHome/webapps"
war {
archiveName = 'academy-web.war'
}
bootWar {
archiveName = 'academy-web-bootable.war'
}
task deployToTomcat(type: Copy, dependsOn: 'build'){
from war
into "$tomcatWebapps"
}
dependencies {
// implementation 'org.springframework:spring-webmvc:4.0.3.RELEASE'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
implementation 'log4j:log4j:1.2.17'
implementation "javax.servlet:javax.servlet-api:4.0.1"
}
1条答案
按热度按时间jmo0nnb31#
这是
Spring-boot
开发团队的预期行为,这里的问题不是tomcat服务器是否嵌入,而是您部署的应用程序的类型。在外部tomcat中,您可以将应用程序打包并部署为
war
文件,spring-boot
团队表示该文件能够支持jsp
页面。在嵌入式Tomcat中,您可能是指将应用程序部署为一个独立的
.jar
文件,并使用嵌入式服务器,这里spring-boot
团队已经提到,这是jsp
技术无法工作的限制之一。同时仔细检查您提到的问题
我正在尝试使用spring-boot和嵌入式tomcat服务器制作一个可运行的war文件。
嵌入式服务器将不会像预期的那样与
war
文件一起工作。war
将只包含关于应用程序的servlet
信息,而不是嵌入式服务器,也不是一个可以启动服务器的独立应用程序。因此,总而言之,war
文件在执行时将不会启动服务器,因此当您访问应用程序时,您将得到404
响应。