Spring boot:找不到JSP(404)

时间:2018-01-25 09:24:53

标签: java spring jsp spring-boot web

我试图用spring boot创建一个新项目。 但我得到的错误如下所述。我添加了我的代码。

错误

  

找不到HTTP ERROR 404页面

这是我的项目结构的链接。 Structure image link

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.wc</groupId>
    <artifactId>wc</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>wc</name>
    <description>Work configurator project</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.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-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </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>

    </dependencies>

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


</project>`

login.jsp 仅包含hello

LoginController.class

@Controller
public class LoginController {
@RequestMapping(value = {"/","/login"},method = RequestMethod.GET)
public ModelAndView getLoginPage(){
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("login");
    return modelAndView;
    }
}

WcApplication.class

@SpringBootApplication
public class WcApplication {

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

为什么我会得到这个以及如何解决这个问题?感谢

3 个答案:

答案 0 :(得分:0)

我认为你错过了ViewResolver配置类。

@Configuration
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter
{
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        registry.viewResolver(resolver);
    }
}

尝试以上配置,并应拨打login.jsp页面。

更新

正如您在application.properties中正确添加了解析程序一样。我认为问题出在文件夹WEB-INF上。此文件夹受外部访问保护,.jsp文件不应位于此文件夹中。它适用于web.xml之类的文件,不应向客户端公开。

只需将其重命名为view(或其他内容),然后将application.properties更改为 -

spring.mvc.view.prefix=/view/jsp/
spring.mvc.view.suffix=.jsp

这绝对有用。

答案 1 :(得分:0)

在我的情况下,我在Spring Boot中正确设置了所有设置。 jspssrc/main/webapp/WEB-INF/jsp中 和index.html中的src/main/resources/static/index.html欢迎页面。尽管如此,我还是努力尝试不呈现jsp页面。我总是得到404的回报。

但是当我更改构建过程以创建war字段而不是jar文件时,它工作正常。

只需在build.gradle文件中进行如下更改,

apply plugin: "war" 

此后,在以Java -jar demo.war为名的战争中,一切都准备就绪并开始工作。

答案 2 :(得分:0)

我只是发生了同样的问题。项目结构正确,一切看起来都不错。我对application.properties spring.mvc.view.prefix进行了一些更改。我将“ / WEB-INF / jsp /”更改为“ WEB-INF / jsp /”,并且一切正常。我认为在generate target并警告它是根目录,因此附加的/作为前缀会令人困惑