Springboot:Localhost:8080导致Whitepage-Error而不是显示内容 [英] Springboot: Localhost:8080 results in Whitepage-Error instead of showing content

查看:100
本文介绍了Springboot:Localhost:8080导致Whitepage-Error而不是显示内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Springboot和Thymeleaf显示基因列表.数据库(基因,蛋白质等)和所有方法(例如基因的getIdentifier)都可以使用. 项目结构为:

I am trying to display a list of genes using Springboot and Thymeleaf. Database (genes, proteins etc.) and all methods(e.g. getIdentifier of a gene) are present and work. The project structure is:

我的类/html文件是:

My classes/html-files are:

主要:

package main;

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

@SpringBootApplication
@ComponentScan
@EnableAutoConfiguration
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

ApplicationController:

ApplicationController:

package gui.spring.controller;

import db.admin.DatabaseQuery;
import db.admin.local.DatabaseQueryLocal;
import db.io.FileReader;
import db.sample.Gene;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import java.util.List;

@SpringBootApplication
@Controller
public class ApplicationController {
    @RequestMapping(value = "/", method=RequestMethod.GET)
    public String root(Model model){
        DatabaseQuery query = new DatabaseQueryLocal();
        new FileReader(query);

        List<Gene> genes = query.getGenes();
        model.addAttribute("genes", genes);
        return "root";
    }

}

root.html:

root.html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <th:block th:each="gene:${genes} ">
        <p th:text="${gene.getIdentifier()}"></p>
    </th:block>


</body>
</html>

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>1.0.0</modelVersion>

    <groupId>SpringBoot</groupId>
    <artifactId>biosampledb</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
    </parent>

    <dependencies>

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

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <type>jar</type>
        </dependency>

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

      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.7.7</version>
      </dependency>

    </dependencies>
</project>

因此,我们已经在课程中进行了此操作,可悲的是,没有对Springboot/Thymeleaf/Maven进行任何解释.我想大部分都弄明白了.我想要的所需结果是,在浏览器中调用"localhost:8080"后,将显示一个基因标识符列表.运行主atm时,出现白色标签错误页面. 我希望这就是解决我的问题所需的全部代码.我监督/错过了什么?

So, we have had this in a course and sadly, no explaination to Springboot/Thymeleaf/Maven was given. I figured out most of it, I guess. What I want as desired result is, that upon calling "localhost:8080" in my browser, a list of gene Identifiers is displayed. Upon running the main atm, I get a Whitelabel error page. I hope, this is all Code needed to fix my problem. What did I oversee/missunderstand?

谢谢:)

这是DatabaseQuery接口(已提供).

This is the DatabaseQuery Interface (which was provided).

package db.admin;

import db.sample.Assay;
import db.sample.Gene;
import db.sample.Protein;
import org.apache.commons.lang3.*;

import java.util.List;
import java.util.Optional;

public interface DatabaseQuery {
    List<Assay> getAssays();

    List<Gene> getGenes();

    List<Protein> getProteins();

    void addAssay(Assay assay);

    void addGene(Gene gene);

    void addProtein(Protein protein);

    /**
     * Returns all Assays that used a Protein that is associated with the given gene.
     *
     * @param gene - gene to get the proteins
     *
     * @return list of associated assays
     */
    List<Assay> getAssaysByGene(Gene gene);

    /**
     * Returns all Proteins that have a measurement above or equal to 'meas' in any Assay
     *
     * @param meas - threshold value
     * @return A list of tuples (Pairs) where the Protein is left and the measured score from the assay is right
     */
    List<Pair<Protein, Double>> getAssayResultsByMeas(Double meas);

    /**
     * Return all Scores and assoc. Assays for a given Protein
     *
     * @param protein - protein to look up
     * @return List of Pairs of assays and results for the given protein on that assay
     */
    List<Pair<Assay, Double>> getScores(Protein protein);

    /**
     * Returns a protein by given identifier. Returns Optinal.empty if there is no protein with this name
     *
     * @param identifier - id of the protein
     * @return Optional protein
     */
    Optional<Protein> getProteinByName(String identifier);

    /**
     * Returns a gene by given identifier. Returns Optinal.empty if there is no gene with this name
     *
     * @param name - id  of a gene
     * @return Optional protein
     */
    Optional<Gene> getGeneByName(String name);

    /**
     * Returns a assay by given identifier. Returns Optinal.empty if there is no assay with this name
     *
     * @param name - id  of a gene
     * @return Optional protein
     */
    Optional<Assay> getAssayByName(String name);
}

DatabaseQueryLocal类:

DatabaseQueryLocal Class:

package db.admin.local;

import db.admin.DatabaseQuery;
import db.sample.Assay;
import db.sample.Gene;
import db.sample.Protein;
import org.apache.commons.lang3.*;
import org.apache.commons.lang3.tuple.ImmutablePair;
//import org.apache.commons.lang3.tuple.ImmutablePair;
//import org.apache.commons.lang3.tuple.Pair;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class DatabaseQueryLocal implements DatabaseQuery {
    private final DatabaseLocal db;

    public DatabaseQueryLocal() {
        this.db = DatabaseLocal.getInstance();
    }

    @Override
    public List<Assay> getAssays(){
        return db.assayList;
    }

    @Override
    public List<Gene> getGenes(){
        return db.geneList;
    }

    @Override
    public List<Protein> getProteins(){
        return db.proteinList;
    }


    @Override
    public void addAssay(Assay assay){
        db.assayList.add(assay);
    }

    @Override
    public void addGene(Gene gene){
        db.geneList.add(gene);
    }

    @Override
    public void addProtein(Protein protein){
        db.proteinList.add(protein);
    }


    /**
     * Returns all Assays that used a Protein that is associated with the given gene.
     *
     * @param gene - gene to get the proteins
     *
     * @return list of associated assays
     */
    @Override
    public List<Assay> getAssaysByGene(Gene gene){
        Protein protein  = gene.getProtein();

        return this.getAssays().stream()
                        .filter(assay -> assay.getUsedProteins().contains(protein))
                        .collect(Collectors.toList());
    }

    /**
     * Returns all Proteins that have a measurement above or equal to 'meas' in any Assay
     *
     * @param meas - threshold value
     * @return A list of pairs where the Protein is left and the measured score from the assay is right
     */
    @Override
    public List<Pair<Protein, Double>> getAssayResultsByMeas(Double meas){
       List<Pair<Protein, Double>> results = new ArrayList<>();

       for(Assay assay: getAssays()){
           List<Double> measurements = assay.getMeasurements();
           List<Protein> proteins = assay.getUsedProteins();

           for (int i = 0; i < measurements.size(); i++) {
               Double m = measurements.get(i);

               if(m >= meas){
                   //results.add(new ImmutablePair<Protein,Double>(proteins.get(i), m));
                   results.add(new Pair<>(proteins.get(i), m));
               }
           }
       }

       return results;
    }


    /**
     * Return all Scores and assoc. Assays for a given Protein
     *
     * @param protein - protein to look up
     * @return List of Pairs of assays and results for the given protein on that assay
     */
    @Override
    public List<Pair<Assay, Double>> getScores(Protein protein) {
        List<Pair<Assay, Double>> results = new ArrayList<>();

        for (Assay assay : getAssays()) {
            List<Double> measurements = assay.getMeasurements();
            List<Protein> proteins = assay.getUsedProteins();

            for (int i = 0; i < proteins.size(); i++) {
                if (proteins.get(i).equals(protein)) {
                    results.add(new Pair<>(assay, measurements.get(i)));
                    //results.add(new ImmutablePair<Assay,Double>(assay, measurements.get(i)));
                    // http://www.javased.com/index.php?api=org.apache.commons.lang3.tuple.Pair
                    // https://www.programcreek.com/java-api-examples/?api=org.apache.commons.lang3.tuple.ImmutablePair
                }
            }
        }

        return results;
    }

    /**
     * Returns a protein by given identifier. Returns Optional.empty if there is no protein with this name
     *
     * @param identifier - id of the protein
     * @return Optional protein
     */
    @Override
    public Optional<Protein> getProteinByName(String identifier){
        Optional<Protein> r = this.getProteins().stream().filter(p -> p.getIdentifier().equals(identifier)).findFirst();

        if(!r.isPresent()){
            System.err.println("DBQueryLocal: could not find protein by name: " + identifier);
        }
        return r;
    }


    /**
     * Returns a gene by given identifier. Returns Optional.empty if there is no gene with this name
     *
     * @param name - id  of a gene
     * @return Optional protein
     */
    @Override
    public Optional<Gene> getGeneByName(String name){
        return this.getGenes().stream().filter(p -> p.getIdentifier().equals(name)).findFirst();
    }



    /**
     * Returns a assay by given identifier. Returns Optional.empty if there is no assay with this name
     *
     * @param name - id  of a gene
     * @return Optional protein
     */
    @Override
    public Optional<Assay> getAssayByName(String name){
        return this.getAssays().stream().filter(p -> p.getName().equals(name)).findFirst();
    }
}

UPDATE3:执行日志

来自IntelliJ的执行日志.最后三行出现 在浏览器中调用"localhost:8080".之后,使用停止按钮手动终止过程.

UPDATE3: Execution log

Execution log from IntelliJ. the last three lines appear, when calling "localhost:8080" in the browers. Process was terminated manually using the stop-button afterwards.

推荐答案

模板的默认百里香叶前缀(属性:spring.thymeleaf.prefix)为:classpath:/templates/

The default thymeleaf prefix (It is the property: spring.thymeleaf.prefix) for templates is: classpath:/templates/

如果您将root.html移至src/main/resources/templates,则应该可以正常工作,如果我什么都不想错过的话.

If you move your root.html to src/main/resources/templates, it should work, if I don't miss anything else.

这篇关于Springboot:Localhost:8080导致Whitepage-Error而不是显示内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆