【问题标题】:Whitelabel error Spring Boot - Project structureWhitelabel 错误 Spring Boot - 项目结构
【发布时间】:2019-06-23 10:02:58
【问题描述】:

我知道到目前为止,关于这个特定主题的问题已经被问过很多次,但是我找不到针对我的问题的确切解决方案,这真的很烦人。我正在编写一个 Spring Boot 应用程序,一切似乎都很好,但它没有给出我描述的 jsp 页面。我认为这与我的班级结构有关,我确实研究过但无法解决。请看一下。谢谢。

这是我得到的结果

enter image description here

我想获得我通常应该得到的特定jsp 页面

这是我的班级结构 enter image description here

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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>CRM</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>CRM</name>
    <description>Demo project for Spring Boot</description>

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

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

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

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/htmlunit-driver -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>htmlunit-driver</artifactId>
        </dependency>

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


        <!-- 
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
         -->
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

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

        <!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>   

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <!-- <scope>compileOnly</scope> -->
        </dependency>

        <!-- https://mvnrepository.com/artifact/oracle/ojdbc6 -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-hikaricp -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-hikaricp</artifactId>
        </dependency>

    </dependencies>

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

</project>

主应用类

package com.example.CRM;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan("com.example.CRM.entity")
@EntityScan(basePackages="com.example.CRM")
@SpringBootApplication
public class CrmApplication extends SpringBootServletInitializer  {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(CrmApplication.class);
    }  

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

}

配置:

package com.example.CRM;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
public class CrmApplicationConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

}

控制器:

package com.example.CRM.controllers;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.example.CRM.dao.CRMStaff;
import com.example.CRM.entity.CRM;

@Controller
@RequestMapping("/")
public class CRMController {

    @GetMapping
    public String getHome()
    {
        return "home";
    }

    @Autowired
    private CRMStaff crmStaff;

    @GetMapping("/staff")
    public String getCrmStaff(Model theModel)
    {
        List<CRM> list = crmStaff.getStaffMembers();
        theModel.addAttribute("staff", list);

        return "list";
    }

}

道:

package com.example.CRM.dao;

import java.util.List;

import com.example.CRM.entity.CRM;

public interface CRMStaff {

    public List<CRM> getStaffMembers();

}

DAO 实现

package com.example.CRM.dao;

import java.util.List;

import javax.transaction.Transactional;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import com.example.CRM.entity.CRM;

@Component
@Repository
public class CRMStaffImpl implements CRMStaff {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    @Transactional
    public List<CRM> getStaffMembers() {

        Session currentSession = sessionFactory.getCurrentSession();
        Query<CRM> theQuery = currentSession.createQuery("from CRM", CRM.class);
        List<CRM> list = theQuery.getResultList();

        return list;
    }

}

实体:

package com.example.CRM.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="CRMMembers")
public class CRM {

    @Id
    //@GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="Member_id")
    private int id;

    @Column(name="firstName")
    private String firstName;

    @Column(name="lastName")
    private String lastName;

    @Column(name="phoneNum")
    private String phoneNum;

    @Column(name="email")
    private String email;

    @Column(name="address")
    private String address;

}

home.jsp

<!DOCTYPE html>
<html>
    <head>
        <title>CRM project | Home</title>
    </head>
    <body>
        <h1>Customer Relation Management</h1>
        <a href="${pageContext.request.contextPath }/staff">Get List of Members</a>
    </body>
</html>

list.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8"/>
        <title>CRM | Staff Members</title>
    </head>
    <body>
        <h3>CRM Staff Members List</h3>
        <hr>
        <table border="1">
            <tr>
                <th>First Name</th>
                <th>Last Name</th>
                <th>Phone</th>
                <th>Email</th>
                <th>Address</th>
            </tr>
            <c:forEach var="temp" items="${staff }">
                <tr>
                    <td>${temp.firstName }</td>
                    <td>${temp.lastName }</td>
                    <td>${temp.phoneNum }</td>
                    <td>${temp.email }</td>
                    <td>${temp.address }</td>
                </tr>
            </c:forEach>
        </table>
    </body>
</html>

【问题讨论】:

  • 请描述或展示您得到的结果,并描述您期望它有何不同。
  • @ordonezalex 已编辑
  • 看看这个答案stackoverflow.com/a/29784088。你的项目中有这些依赖项吗?请在问题中包含您的构建文件(Gradle、Maven 等)。
  • @ordonezalex 添加了 pom.xml
  • whitelabel 错误页面除了 404 之外并没有告诉你出了什么问题。404 通常发生在没有用于 URI/请求的资源,或者有错误的映射(查看此映射中的映射)案子)。后者很可能是因为带有视图映射到 jsp 的 @ordonezalex 版本似乎可以工作。

标签: spring spring-boot


【解决方案1】:

当我将这些属性添加到 application.properties 时,您的项目对我有用。

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

这是一个供您尝试的存储库:https://github.com/a-p-o/stackoverflow-whitelabel-error-spring-boot-project-structure

【讨论】:

  • 嗯,你的工作正常。我的可能有点复杂,数据库连接等等。你认为还有什么可能导致这个问题?也许会出现另一个问题,最后它给出了这样的白标页面
  • 我要从头开始写所有东西。再一步一步做,也许我会弄清楚问题到底出在哪里。
猜你喜欢
  • 2018-11-14
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 2018-06-09
  • 2018-04-19
相关资源
最近更新 更多