为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

30秒到达战场 2021-10-28 15:53:32
我有一个使用 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>
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

您应该为 Web 应用程序创建 a.war而不是 a .jar,您将看到该WEB-INF文件夹。

也变

spring.mvc.view.prefix=/WEB-INF/ 到 spring.mvc.view.prefix=/WEB-INF/templates 和

ModelAndView("templates/test-block")ModelAndView("test-block")解决 404 错误。


查看完整回答
反对 回复 2021-10-28
?
长风秋雁

TA贡献1757条经验 获得超7个赞

值得注意的是:

默认情况下,Spring Boot 提供来自类路径或 ServletContext 根目录中名为 /static(或 /public 或 /resources 或 /META-INF/resources)的目录中的静态内容。它使用 Spring MVC 中的 ResourceHttpRequestHandler,因此您可以通过添加自己的 WebMvcConfigurer 并覆盖 addResourceHandlers 方法来修改该行为。

...

您还可以使用 spring.resources.static-locations 属性(用目录位置列表替换默认值)自定义静态资源位置。

...

如果您的应用程序打包为 jar,请不要使用 src/main/webapp 目录。虽然这个目录是一个通用的标准,但它只适用于war包,如果你生成一个jar,它会被大多数构建工具默默地忽略。

所以,你看到的是预期的行为。您可以将模板移动到预期位置之一、自定义默认位置或使用战争打包。


查看完整回答
反对 回复 2021-10-28
?
MM们

TA贡献1886条经验 获得超2个赞

Spring Boot 会查找网页的资源文件夹。Webapp 文件夹不在 spring boot 应用程序的类路径中。您需要使用 maven 插件将您的 webapp 文件夹复制到 jar/war 文件中。它在 IDE 中工作,因为它确切知道在哪里可以找到网页。


查看完整回答
反对 回复 2021-10-28
  • 3 回答
  • 0 关注
  • 238 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信