spring+jsp 应用程序在 tomcat 中运行但在嵌入式 tomcat 中响应 404
spring+jsp app works in tomcat but respond 404 in embedded tomcat
我有一个 spring-mvc + jsp 项目,可以在 external tomcat[=27 上完美运行=] 服务器。我正在尝试使用 spring-boot 和嵌入式 tomcat 制作一个 可运行的 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"
}
根据 Spring-boot
的开发团队,这是预期的行为。这里的问题不是 tomcat 服务器是否嵌入,而是您部署的应用程序类型。
在外部 tomcat 中,您将应用程序打包并部署为 war
文件,spring-boot
团队表示该文件能够支持 jsp
页面。
在嵌入式 tomcat 中,您的意思可能是将应用程序部署为带有嵌入式服务器的独立 .jar
文件,此处 spring-boot
团队提到这是限制之一jsp
技术将不起作用。 Relevant Spring Boot documetation
同时仔细检查您提到的问题
I'm trying to make a runable war file with using spring-boot and
embedded tomcat server.
嵌入式服务器无法按预期处理 war
文件。 war
将仅包含 servlet
有关应用程序的信息,而不是嵌入式服务器,也不是可以启动服务器的独立应用程序。因此总结 war
文件在执行时不会启动服务器,因此当您访问应用程序时会得到 404
响应。
我有一个 spring-mvc + jsp 项目,可以在 external tomcat[=27 上完美运行=] 服务器。我正在尝试使用 spring-boot 和嵌入式 tomcat 制作一个 可运行的 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"
}
根据 Spring-boot
的开发团队,这是预期的行为。这里的问题不是 tomcat 服务器是否嵌入,而是您部署的应用程序类型。
在外部 tomcat 中,您将应用程序打包并部署为 war
文件,spring-boot
团队表示该文件能够支持 jsp
页面。
在嵌入式 tomcat 中,您的意思可能是将应用程序部署为带有嵌入式服务器的独立 .jar
文件,此处 spring-boot
团队提到这是限制之一jsp
技术将不起作用。 Relevant Spring Boot documetation
同时仔细检查您提到的问题
I'm trying to make a runable war file with using spring-boot and embedded tomcat server.
嵌入式服务器无法按预期处理 war
文件。 war
将仅包含 servlet
有关应用程序的信息,而不是嵌入式服务器,也不是可以启动服务器的独立应用程序。因此总结 war
文件在执行时不会启动服务器,因此当您访问应用程序时会得到 404
响应。