【问题标题】:Spring boot: JSP not found (404)春季启动:未找到 JSP(404)
【发布时间】:2018-07-04 12:00:13
【问题描述】:

我正在尝试使用 Spring Boot 创建一个新项目。 但是我收到了下面描述的错误。我已经添加了我的代码。

错误

找不到 HTTP 错误 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);
    }
}

为什么会出现这个问题以及如何解决这个问题?谢谢

【问题讨论】:

  • 你添加了ViewResolver吗?
  • @gohil90 在 application.properties 得到了这个:'spring.mvc.view.prefix=/WEB-INF/jsp/spring.mvc.view.suffix=.jsp' sry,忘了这个问题
  • 尝试使用调试阈值打开日志,因为我认为您可能需要另一个依赖项,因为嵌入式 tomcat jar 存在问题,并且他不会在运行时编译 jsp,因此需要再添加一个,查看mkyong
  • @Ivan:你搞定了吗?如果是,您介意更新修复它的内容吗?
  • @Ivan 您可以通过editing 它在问题中添加缺失的部分。另外,请添加堆栈跟踪。

标签: java spring jsp spring-boot web


【解决方案1】:

我认为你错过了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

这肯定行得通。

【讨论】:

  • 我在 application.properties 得到了这个:'spring.mvc.view.prefix=/WEB-INF/jsp/spring.mvc.view.suffix=.jsp'
【解决方案2】:

在我的情况下,我在 spring boot 中正确设置了所有内容。 jspssrc/main/webapp/WEB-INF/jspindex.htmlsrc/main/resources/static/index.html 中的欢迎页面。尽管如此,我还是很努力地尝试了 jsp 页面没有被渲染。我总是得到404 的回报。

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

刚刚在build.gradle 文件中进行了额外的行更改,如下所示

apply plugin: "war" 

在那之后,在作为 java -jar demo.war 进行战争的同时,一切都到位并开始工作。

【讨论】:

    【解决方案3】:

    我刚刚发生了同样的问题。项目结构正确,一切看起来都很好。我对我的 application.properties spring.mvc.view.prefix 做了一点改动。我将“/WEB-INF/jsp/”更改为“WEB-INF/jsp/”,一切正常。我认为在生成目标和战争中它是根目录,所以作为前缀的附加 / 令人困惑

    【讨论】:

      【解决方案4】:

      这是一个层次问题,WEB-INF应该在webapp文件夹下。

      yourMainPackage/src/main/webapp/WEB_INF
      

      (请注意,要使其与 springboot 默认配置一起使用,webapp/ 应该在 main/ 下,而不是在 resources 下)

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题,我花了很长时间才弄清楚存在三个条件。

        1.) 在应用程序属性中,您需要具有以下视图解析器映射 (你也可以使用基于java的):

        logging.level.web=DEBUG
        spring.mvc.view.prefix=/WEB-INF/pages/
        spring.mvc.view.suffix=.jsp
        
        Note: you have to create "WEB-INF" folder by yourself as in my case "webapp" 
           folder was empty. DEBUG property is not necessary just keep it as it will 
           help you find the root cause from logs. 
        

        2.) 我不得不将包装设为“战争”而不是罐子。

        <packaging>war</packaging>
        

        3.) 确保您已添加 tomcat jasper 依赖项来编译 jsp 页面 运行时。

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

        希望对我有所帮助并随时纠正我。

        【讨论】:

          猜你喜欢
          • 2016-08-22
          • 2016-01-28
          • 1970-01-01
          • 2018-10-05
          • 2021-07-14
          • 2021-02-05
          • 1970-01-01
          • 2016-09-03
          • 2019-07-21
          相关资源
          最近更新 更多