Spring Boot JSP 404.Whitelabel 错误页面

问题描述 投票:0回答:3

无法使用 spring-boot 加载非常简单的 JSP 页面,出现 404 Not Found

HmisApplication.class

@SpringBootApplication
public class HmisApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(HmisApplication.class);
}

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

MainController.java

@Controller
public class WelcomeController {
@RequestMapping("/")
public String home(Map<String, Object> model) {
    model.put("message", "HowToDoInJava Reader !!");
    return "index";
}

@RequestMapping("/next")
public String next(Map<String, Object> model) {
    model.put("message", "You are in new page !!");
    return "next";
}
}

应用程序.属性

spring.profiles.active=dev,build-info

server.contextPath=/hmis
server.port=7070
spring.metrics.export.enabled=true

spring.main.banner-mode=off

spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
application.message: Hello Phil

# HTTP encoding (HttpEncodingProperties)
spring.http.encoding.force-request=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<groupId>com.hmis</groupId>
<artifactId>hmis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<name>hmis</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring-boot-starter-basic</artifactId>
        <version>5.21.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <!--
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <!-- Tomcat Embed -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <!--<scope>provided</scope>-->
    </dependency>
    <!-- JSTL -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <!-- To compile JSP files -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <useSystemClassLoader>false</useSystemClassLoader>
            </configuration>
        </plugin>
    </plugins>
</build>

MvcConfiguration.java

@Configuration
@EnableWebMvc
@ComponentScan
public class MvcConfiguration extends WebMvcConfigurerAdapter
{
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/jsp/");
    resolver.setSuffix(".jsp");
    resolver.setViewClass(JstlView.class);
    registry.viewResolver(resolver);
}
}

文件结构

        ├── src
        ├── main
        │   ├── java
        │   │   └── com
        │   │       └── hmis
        │   │             ├── HmisApplication.java
        │   │             ├── MvcConfiguration.java
        │   │             ├── WelcomeController.java  
        │   └── resources
        │       └── application.properties
        │       └── webapp
        │             └── WEB-INF
        │                   └── jsp
        │                         └── index.jsp
        │                         └── next.jsp
jsp spring-boot http-status-code-404
3个回答
5
投票

我在 pom.xml 进行一些更改后解决了问题。注释掉

scope
依赖项的
tomcat-embed-jasper
标签。

<groupId>com.hmis</groupId>
<artifactId>hmis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<name>hmis</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring-boot-starter-basic</artifactId>
        <version>5.21.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <!-- Tomcat Embed -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <!--<scope>provided</scope>-->
    </dependency>
    <!-- JSTL -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- To compile JSP files -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <!--<scope>provided</scope>-->
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

1
投票

我得到了显示如下的jsp页面。我正在使用 IntelliJ Ultimate。

1。创建了 webapp、WEB-INF、jsp 目录,如 src -> main -> webapp -> WEB-INF ->jsp

2。将要渲染的jsp页面(login.jsp)放置在src -> main -> webapp -> WEB-INF -> jsp ->login.jsp

下面的屏幕截图以供快速参考

3。在 application.properties 文件中添加了以下内容:

   spring.mvc.view.prefix= /WEB-INF/jsp/
   spring.mvc.view.suffix= .jsp

4。注释掉 pom.xml 中

tomcat-embed-jasper
依赖项的版本

 <!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
   <!--        <version>10.0.2</version>-->
        </dependency>

0
投票

我在使用 JSP 时遇到了同样的问题,它只是返回 Whitelabel 错误,在访问任何端点时,即使有端点,它仍然返回 Whitelabel 错误页面。 问题是 JSP 有一些限制:

  • 对于 Tomcat,如果您使用 war 打包,它应该可以工作,即可执行的 war 可以工作,并且还可以部署到标准容器(不限于但包括 Tomcat)。由于 Tomcat 中的硬编码文件模式,可执行 jar 将无法工作。
  • Jetty 目前不能作为带有 JSP 的嵌入式容器。

所以,解决方案是使用 pom.xml 内的战争

<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
  http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <packaging>war</packaging>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.1</version>
    <relativePath/>
  </parent>
  <properties>
   <!-- Properties -->
  </properties>
  <dependencies>
    <!-- dependencies -->
  </dependencies>
</project>

之后,只需运行一个简单的

java -jar file.war
命令,它现在就应该可以工作了。

© www.soinside.com 2019 - 2024. All rights reserved.