使用SpringBoot,Spring-MVC和Maven的WebApp中未包含WEB-INF

时间:2018-10-05 17:15:44

标签: java maven spring-mvc spring-boot

我有一个使用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 个答案:

答案 0 :(得分:2)

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

也要更改

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

参考serving static content上的Spring Boot文档。

值得注意的是:

  

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

...

  

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

...

  

如果您的应用程序是,请不要使用src / main / webapp目录   包装为罐子。尽管此目录是通用标准,但它   仅适用于战争包装,大多数人默默忽略   如果生成jar,则构建工具。

因此,您看到的是预期的行为。您可以将模板移至预期位置之一,自定义默认位置,也可以使用战争包装。