简体   繁体   English

Springboot:Localhost:8080导致Whitepage-Error而不是显示内容

[英]Springboot: Localhost:8080 results in Whitepage-Error instead of showing content

I am trying to display a list of genes using Springboot and Thymeleaf. 我正在尝试使用Springboot和Thymeleaf显示基因列表。 Database (genes, proteins etc.) and all methods(eg getIdentifier of a gene) are present and work. 数据库(基因,蛋白质等)和所有方法(例如,基因的getIdentifier)都可以使用。 The project structure is: 项目结构为:

在此处输入图片说明

My classes/html-files are: 我的类/ html文件是:

Main: 主要:

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: 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>

So, we have had this in a course and sadly, no explaination to Springboot/Thymeleaf/Maven was given. 因此,我们在课程中遇到了这个问题,可悲的是,没有给出对Springboot / Thymeleaf / Maven的解释。 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. 我想要的结果是,在浏览器中调用“ localhost:8080”后,将显示一个基因标识符列表。 Upon running the main atm, I get a Whitelabel error page. 运行主atm时,出现白色标签错误页面。 I hope, this is all Code needed to fix my problem. 我希望这是解决我的问题所需的全部代码。 What did I oversee/missunderstand? 我监督/错过了什么?

Thanks :) 谢谢 :)

UPDATE: New project structure 更新:新项目结构

在此处输入图片说明

UPDATE2: DatabaseQuery and DatabaseQueryLocal UPDATE2:DatabaseQuery和DatabaseQueryLocal

This is the DatabaseQuery Interface (which was provided). 这是DatabaseQuery接口(已提供)。

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 Class: DatabaseQueryLocal类:

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: Execution log UPDATE3:执行日志

Execution log from IntelliJ. 来自IntelliJ的执行日志。 the last three lines appear, when calling "localhost:8080" in the browers. 在浏览器中调用“ localhost:8080”时,出现最后三行。 Process was terminated manually using the stop-button afterwards. 之后,使用停止按钮手动终止过程。

The default thymeleaf prefix (It is the property: spring.thymeleaf.prefix) for templates is: classpath:/templates/ 模板的默认thymeleaf前缀(它是属性:spring.thymeleaf.prefix)是:classpath:/ templates /

If you move your root.html to src/main/resources/templates, it should work, if I don't miss anything else. 如果您将root.html移至src / main / resources / templates,则它应该可以工作,如果我什么都不想错过的话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Apache Tomcat 在 localhost:8080 显示一个已经制作的 WAR 文件而不是主页 - Apache Tomcat is showing an already made WAR file instead of the home page at localhost:8080 当我在 springboot 项目中点击 http://localhost:8080/h2-console url 时出现 Whitelabel Error Page 错误 - i got Whitelabel Error Page error when i hit http://localhost:8080/h2-console url in springboot project 无法从 eclipse springboot 应用程序访问 localhost:8080 - Unable to access localhost:8080 from eclipse springboot application Eureka 的 Springboot 错误,浏览器显示 xml 而不是 json - Springboot error for Eureka with browsers showing xml instead of json 连接到本地主机上的SLiM服务器时出错:8080 - Error connecting to SLiM server on localhost:8080 为什么&#39;/ test&#39;转到&#39;localhost:8080 / test&#39;而不是&#39;localhost:8080 / rootcontext / test&#39; - why '/test' goes to 'localhost:8080/test' instead of 'localhost:8080/rootcontext/test' Tomcat7(localhost:8080):404错误 - Tomcat7 (localhost:8080): 404 error 将 Angular 连接到 Spring 的 CORS 错误(localhost 8080 &lt;--&gt; localhost 4200) - CORS error connecting Angular to Spring (localhost 8080 <--> localhost 4200) Wildfly继续将localhost:8080 / app重定向到localhost:8080 / app /以403错误结尾 - Wildfly keeps redirecting localhost:8080/app to localhost:8080/app/ ending in 403 error Springboot-为什么我不能设置url localhost:8080 / helloworld来获取文本“ hello world”? - Springboot-why i cannot set url localhost:8080/helloworld to get text “hello world”?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM