Spring Boot: страница ошибки Whitelabel с кодом состояния 404 - PullRequest
0 голосов
/ 10 июля 2020

Я разработал маленькое приложение для весенней загрузки с упаковкой в ​​банку. Пример использования приложения: пользователь войдет в приложение и отобразит страницу приветствия. Ниже мой код.

Основной класс

package com.ibm.heathcare;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages= {"com.ibm.heathcare.*"})
public class HeathcareappApplication {

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

}

Класс контроллера входа

package com.ibm.heathcare.controller;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.ibm.heathcare.modal.Login;
import com.ibm.heathcare.modal.User;
import com.ibm.heathcare.service.AuthService;

@Controller
@SessionAttributes({"userName","uid"})
public class LoginController {
    
    @Autowired
    AuthService authService;
    
    @RequestMapping("/login")
    public String showLoginPage(ModelMap model){
        //model.addAttribute("login", new Login());
        return "login";
    }
    
    
      @RequestMapping("/logout") 
      public String showLogoutPage(ModelMap model){
      model.put("message", "Successfully Log out...");
      return "redirect:/login"; 
      
      }
      @RequestMapping("/welcome")
      public String showWelcomePage(ModelMap model) {
          return "welcome";
      }
     
    
    
    @RequestMapping(value="/login" ,method=RequestMethod.POST)
    public String showwelcomePage(@RequestParam String uid, @RequestParam String pwd,ModelMap model){
        Optional<User> optUser=authService.getAuthenticate(uid, pwd);
        if(optUser.isPresent()) {
            User user=optUser.get();
            model.put("userName", user.getUserName() );
            model.put("uid", user.getUserId());
            return "welcome";
        }else {
            model.addAttribute("login", new Login("",""));
            model.addAttribute("errorMessage",new String("Invalid Credential"));
            
            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>
    <form method="post">
            User ID :<input type="text" name="uid"/><p>
            Password:<input type="password" name="pwd"/><br>
            <input type="submit" value="Login" />
    </form>

</body>
</html>

добро пожаловать. jsp

<%@ include file="common/header.jspf" %>
<%@ include file="common/navigation.jspf" %>
<div class="jumbotron text-center" >
    <h1>Welcome<h1><p>
    <h2> ${userName} </h2>
</div>
<%@ include file="common/footer.jspf" %>

application.properties

#Server Configuration
server.port = 8282

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

POM. xml

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ibm</groupId>
    <artifactId>heathcare</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>heathcareapp</name>
    <description>Health Care Management Application</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.9</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.6</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>1.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap-datepicker</artifactId>
            <version>1.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

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

</project>

Теперь, когда я выполнил это приложение через eclipse, оно работало хорошо. Я создал банку приложения с помощью инструмента maven, созданного в целевой папке. Я выполнил jar приложения из целевой папки с помощью командной строки. Работало нормально. Но когда я копирую ту же банку в другую папку на моем компьютере и пытаюсь выполнить с помощью команды java -jar app.jar и нажимаю URL-адрес http://localhost: 8282 / login в браузере, это дает мне страницу ошибки Whitelabel со статусом код 404. Я не уверен, что не так с приложением. Я много искал в Интернете, и некоторые эксперты предложили явно написать @ComponentScan с информацией о базовом пакете в основном классе. Я сделал то же самое, но у меня это не сработало. В консоли отображается журнал ниже.

2020-07-10 10:38:52.605  INFO 11788 --- [         task-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2020-07-10 10:38:53.888  INFO 11788 --- [           main] DeferredRepositoryInitializationListener : Spring Data repositories initialized!
2020-07-10 10:38:53.918  INFO 11788 --- [           main] c.ibm.heathcare.HeathcareappApplication  : Started HeathcareappApplication in 24.424 seconds (JVM running for 25.755)
2020-07-10 10:39:18.728  INFO 11788 --- [nio-8282-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-07-10 10:39:18.729  INFO 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-07-10 10:39:18.730 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet        : Detected StandardServletMultipartResolver
2020-07-10 10:39:18.783 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet        : enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data
2020-07-10 10:39:18.784  INFO 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 54 ms
2020-07-10 10:39:18.901 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet        : GET "/login", parameters={}
2020-07-10 10:39:18.916 DEBUG 11788 --- [nio-8282-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.ibm.heathcare.controller.LoginController#showLoginPage(ModelMap)
2020-07-10 10:39:19.022 DEBUG 11788 --- [nio-8282-exec-1] o.s.w.s.v.ContentNegotiatingViewResolver : Selected 'text/html' given [text/html, application/xhtml+xml, image/webp, application/xml;q=0.9, */*;q=0.8]
2020-07-10 10:39:19.022 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.view.JstlView            : View name 'login', model {}
2020-07-10 10:39:19.043 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.view.JstlView            : Forwarding to [/WEB-INF/jsp/login.jsp]
2020-07-10 10:39:19.160 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet        : Completed 404 NOT_FOUND
2020-07-10 10:39:19.163 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet        : "ERROR" dispatch for GET "/error", parameters={}
2020-07-10 10:39:19.168 DEBUG 11788 --- [nio-8282-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#errorHtml(HttpServletRequest, HttpServletResponse)
2020-07-10 10:39:19.664 DEBUG 11788 --- [nio-8282-exec-1] o.s.w.s.v.ContentNegotiatingViewResolver : Selected 'text/html' given [text/html, text/html;q=0.8]
2020-07-10 10:39:19.684 DEBUG 11788 --- [nio-8282-exec-1] o.s.web.servlet.DispatcherServlet        : Exiting from "ERROR" dispatch, status 404

Пожалуйста, помогите мне найти проблему.

1 Ответ

1 голос
/ 10 июля 2020

Прежде всего, вы пытаетесь обслужить jsp просмотров с помощью jar. В самой документации Spring-Boot указано, что jsp плохо go с упаковкой jar. Итак, меняем упаковку с баночки на war. Затем убедитесь, что файлы jsp помещены под WEB-INF, как вы указали в application.properties. Скорее всего, ваша проблема заключается в том, что jsp не был включен в jar, поскольку он находился в папке WEB-INF.

Проблема в том, что когда вы используете java -*.jar для развертывания приложения springboot, Файлы jsp не будут присутствовать во встроенном tomcat, и при попытке обслужить запрос вы получите 404 PAGE NOT FOUND. Это из-за упаковки jar, поэтому файлы jsp не копируются из папки WEB-INF. Если вы храните файлы jsp в папке META-INF/resources при использовании jar в качестве упаковки, это должно работать.

Связано: Почему загрузка Spring не поддерживает jsp, хотя она может отображать страницу, если мы добавим правильную ссылку на jar

...