spring+jsp应用程序在tomcat中工作,但在嵌入式tomcat中响应404

0md85ypi  于 2022-12-07  发布在  Spring
关注(0)|答案(1)|浏览(118)

我有一个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"
}
jmo0nnb3

jmo0nnb31#

这是Spring-boot开发团队的预期行为,这里的问题不是tomcat服务器是否嵌入,而是您部署的应用程序的类型。
在外部tomcat中,您可以将应用程序打包并部署为war文件,spring-boot团队表示该文件能够支持jsp页面。
在嵌入式Tomcat中,您可能是指将应用程序部署为一个独立的.jar文件,并使用嵌入式服务器,这里spring-boot团队已经提到,这是jsp技术无法工作的限制之一。
同时仔细检查您提到的问题
我正在尝试使用spring-boot和嵌入式tomcat服务器制作一个可运行的war文件。
嵌入式服务器将不会像预期的那样与war文件一起工作。war将只包含关于应用程序的servlet信息,而不是嵌入式服务器,也不是一个可以启动服务器的独立应用程序。因此,总而言之,war文件在执行时将不会启动服务器,因此当您访问应用程序时,您将得到404响应。

相关问题