WEB-INF 未包含在使用 SpringBoot、Spring-MVC 和 Maven

我有一个使用 Maven 构建的 Spring-MVC 的 web 应用程序。当我生成 JAR 文件时,应用程序启动得很好。控制器正在执行,但是当我到达这一部分时:


@RequestMapping(value = "/test-block", method = RequestMethod.GET)

public ModelAndView block(Model model) {

    return new ModelAndView("templates/test-block");

}

我收到此错误:


There was an unexpected error (type=Not Found, status=404).

/WEB-INF/templates/test-block.jsp

请注意,在 IDE 中调试或运行可以正常工作。


我的文件夹:


src

|--main

   |--java

      |--com.xxx // sources

      webapp

      |--WEB-INF

         |--templates

            |--*.jsp // jsp files

      resources

      |--application.properties

我的应用程序属性:


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

spring.mvc.view.suffix=.jsp

我检查了生成的 JAR 文件,但在任何地方都看不到 WEB-INF。


编辑:


pom文件:


    <packaging>war</packaging>


    <build>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <configuration>

                    <source>8</source>

                    <target>8</target>

                </configuration>

            </plugin>

        </plugins>

    </build>


30秒到达战场
浏览 239回答 3
3回答

森林海

您应该为 Web 应用程序创建 a.war而不是 a&nbsp;.jar,您将看到该WEB-INF文件夹。也变spring.mvc.view.prefix=/WEB-INF/&nbsp;到&nbsp;spring.mvc.view.prefix=/WEB-INF/templates&nbsp;和ModelAndView("templates/test-block")来ModelAndView("test-block")解决 404 错误。

长风秋雁

值得注意的是:默认情况下,Spring Boot 提供来自类路径或 ServletContext 根目录中名为 /static(或 /public 或 /resources 或 /META-INF/resources)的目录中的静态内容。它使用 Spring MVC 中的 ResourceHttpRequestHandler,因此您可以通过添加自己的 WebMvcConfigurer 并覆盖 addResourceHandlers 方法来修改该行为。...您还可以使用 spring.resources.static-locations 属性(用目录位置列表替换默认值)自定义静态资源位置。...如果您的应用程序打包为 jar,请不要使用 src/main/webapp 目录。虽然这个目录是一个通用的标准,但它只适用于war包,如果你生成一个jar,它会被大多数构建工具默默地忽略。所以,你看到的是预期的行为。您可以将模板移动到预期位置之一、自定义默认位置或使用战争打包。

MM们

Spring Boot 会查找网页的资源文件夹。Webapp 文件夹不在 spring boot 应用程序的类路径中。您需要使用 maven 插件将您的 webapp 文件夹复制到 jar/war 文件中。它在 IDE 中工作,因为它确切知道在哪里可以找到网页。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java