Spring Boot - 无法解析 Whitelabel 错误页面

新手上路,请多包涵

我试图从 2 天开始运行一个简单的 Spring Boot 应用程序,但仍然无法使其工作。我检查了所有相关问题和博客,但问题仍然存在。

我的项目结构如下所示。

项目结构

POM文件

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.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.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
     <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
</dependencies>

WebApplication.java

 @SpringBootApplication
public class WebApplication extends SpringBootServletInitializer{

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(WebApplication.class);
    }

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

}

应用程序.properties

 server.servlet.context-path=/EBS-web
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
logging.level.org.springframework.web=DEBUG

登录控制器

@Controller
public class LoginController {

    @RequestMapping(path="/")
    public String login() {
        System.out.println("******************logging************************");
        return "login";
    }

}

登录.jsp

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Hi Login
</body>
</html>

每当我尝试将应用程序作为 Spring Boot App(Eclipse 的 STS 插件)运行并访问 http://localhost:8080/EBS-web/ 时,它会在 UI 上显示以下错误消息

Whitelabel Error Page 此应用程序没有明确的 /error 映射,因此您将其视为后备。

Sun Sep 23 17:34:52 IST 2018 出现意外错误(类型=未找到,状态=404)。没有可用的消息

从下面的堆栈跟踪中,我可以看到 spring 能够获取处理程序方法但无法找到关联的视图。

2018-09-23 17:44:12.248 DEBUG 14728 — [nio-8080-exec-2] osweb.servlet.DispatcherServlet:[/EBS-web/] 的最后修改值是:-1

******************日志记录************************

2018-09-23 17:44:12.258 DEBUG 14728 — [nio-8080-exec-2] oswsvContentNegotiatingViewResolver:请求的媒体类型是 [text/html、application/xhtml+xml、image/webp、image/apng、application /xml;q=0.9, / ;q=0.8] 基于接受标头类型和可生成的媒体类型 [ / ]) 2018-09-23 17:44:12.258 DEBUG 14728 — [nio-8080-exec-2] oswservlet.view.BeanNameViewResolver:未找到视图名称“登录”的匹配 bean 2018-09-23 17:44:12.260 DEBUG 14728 — [nio-8080-exec-2] oswsvContentNegotiatingViewResolver:返回 [org.springframework.web。 servlet.view.JstlView: 名称 ‘登录’; URL [/WEB-INF/jsp/login.jsp]] 基于请求的媒体类型 ‘text/html’ 2018-09-23 17:44:12.260 DEBUG 14728 — [nio-8080-exec-2] osweb。 servlet.DispatcherServlet : 渲染视图 [org.springframework.web.servlet.view.JstlView: name ‘login’; DispatcherServlet 中的 URL [/WEB-INF/jsp/login.jsp]] 名称为“dispatcherServlet” 2018-09-23 17:44:12.264 DEBUG 14728 — [nio-8080-exec-2] osweb.servlet.view .JstlView:转发到资源 [/WEB-INF/jsp/login.jsp] InternalResourceView ‘login’ 2018-09-23 17:44:12.266 DEBUG 14728 — [nio-8080-exec-2] osweb.servlet .DispatcherServlet:名称为“dispatcherServlet”的 DispatcherServlet 处理 [/EBS-web/WEB-INF/jsp/login.jsp] 的 GET 请求 2018-09-23 17:44:12.267 DEBUG 14728 — [nio-8080-exec -2] swsmmaRequestMappingHandlerMapping:查找路径/WEB-INF/jsp/login.jsp 2018-09-23 17:44:12.268 DEBUG 14728 — [nio-8080-exec-2] swsmmaRequestMappingHandlerMapping 的处理程序方法:未找到[/WEB-INF/jsp/login.jsp] 2018-09-23 17:44:12.268 DEBUG 14728 — [nio-8080-exec-2] oswshandler.SimpleUrlHandlerMapping 的处理程序方法:匹配请求模式 [/WEB -INF/jsp/login.jsp] 是 [/**]

原文由 Mayank Vaid 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 565
2 个回答

请在你的控制器中定义方法:你可以定义 @RequestMapping(value = "/", method = RequestMethod.GET) 或者你可以直接使用@GetMapping

 @Controller
public class LoginController {

    @GetMapping(path="/")
    public String login() {
        System.out.println("******************logging************************");
        return "login";
    }

}

您的 pom 中可能存在更多冲突,例如无需添加 tomcat 依赖项,因为它已经嵌入,因此可以删除下面的内容。

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

要启用对 JSP 的支持,请添加对 tomcat-embed-jasper 的依赖。

 <dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

在 2.x 版本之后不需要扩展 SpringBootServletInitializer 所以下面应该足以开始。

 @SpringBootApplication
public class WebApplication{

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

}

原文由 kj007 发布,翻译遵循 CC BY-SA 4.0 许可协议

添加 @RestController 而不是 @Controller 。然后运行您的 Java 应用程序。这应该解决 WhiteLabel 错误

原文由 Pooja R S 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题