Spring Boot 404 при попытке загрузить файл HTML с помощью Thymeleaf - PullRequest
0 голосов
/ 25 сентября 2018

Как видно из названия, я получаю страницу ошибки Whitelabel 404 при попытке доступа к localhost: 8080.

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

package com.michaelLong.studentaddressbook;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class StudentAddressBookApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {

        SpringApplication.run(StudentAddressBookApplication.class, args);
    }
}

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.michaelLong</groupId>
    <artifactId>student-address-book</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>student-address-book</name>
    <description>Demo project for Spring Boot</description>

    <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-actuator</artifactId>
        </dependency>

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

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</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>

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

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

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

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

</project>

Контроллер :

package controller;

import model.Student;
import model.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.ui.Model;
import java.util.Map;

@Controller
public class StudentController {

    @Autowired
    StudentRepository studentRepository;

    @GetMapping("/")
    public String showStudents(Model model){
        model.addAttribute("students", studentRepository.findAll());
        return "showStudents";
    }
}

application.properties :

spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/StudentAddressBook
spring.datasource.username=root
spring.datasource.password=SQLpassword

showStudents.html :

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Student List</title>
</head>
<body>
<h2>List of students</h2>

<table>
    <tr>
        <th>Id</th>
        <th>First name</th>
        <th>Last name</th>
    </tr>
    <tr th:each="student: ${students}">
        <td th:text="${student.id}">Id</td>
        <td th:text="${student.firstName}">First name</td>
        <td th:text="${student.lastName}">Last name</td>
    </tr>

</table>
</body>
</html>

Структура проекта :

src
|__main
   |__java
   |  |__com.example.studentaddressbook
   |  |  |__StudentAddressBookApplication
   |  |__controller
   |  |  |__StudentController
   |  |__model
   |     |__Student
   |     |__StudentRepository
   |__resources
      |__static
      |__templates
      |  |__showStudents.html
      |__application.properties

Я пытался просмотреть множество различных учебных пособий и несколько SO-сообщений, таких как: Spring Boot and Thymeleaf: Не удается найти шаблоны HTML & Почему html-страница не отображается в тимилфиле?

Изначально я пытался использовать JSP, но я также не мог заставить их работать.Я чувствую, что сейчас бьюсь головой о стену, и я не знаю, что еще делать.Я впервые пытаюсь использовать Spring Boot и Thymeleaf, поэтому мне сложно разобраться с этим.

Любая помощь в попытке выяснить, почему я не могу получить доступ к HTML-странице, будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Проблема возникает из-за структуры вашего проекта.Создайте пакет controller и model в com.example.studentaddressbook.Создайте структуру проекта, как это изображение.Дайте нам знать, что это работает

enter image description here

0 голосов
/ 26 сентября 2018

Ваше приложение StudentAddressBookApplication находится в пакете "com.michaelLong.studentaddressbook" => оно будет сканировать только компоненты из этого родительского пакета.

StudentController находится в пакете "controller" => приложение не будетсканировать его вообще.

Очень простое решение: переместить StudentController в пакет com.michaelLong.studentaddressbook.Кроме того, то же самое относится и к StudentRepository.

PS пакеты в java всегда в нижнем регистре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...