代码之家  ›  专栏  ›  技术社区  ›  Mariano L

WEB-INF未包含在使用SpringBoot、SpringMVC和Maven的WebApp中

  •  3
  • Mariano L  · 技术社区  · 6 年前

    我有一个使用Maven构建的springmvc的webapp。当我生成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
    

    编辑:

        <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 回复  |  直到 6 年前
        1
  •  4
  •   Nicholas K    6 年前

    你应该创建一个 .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错误。

        2
  •  1
  •   The Gilbert Arenas Dagger iainpb    6 年前

    请参阅上的Spring Boot文档 serving static content .

    /中的静态(或/public或/resources或/META-INF/resources) 来自springmvc的ResourceHttpRequestHandler,以便您可以修改它 addResourceHandlers方法。

    ...

    您还可以使用 包含目录位置列表的值)。

    ...

    如果您的应用程序正在运行,请不要使用src/main/webapp目录 包装成罐子。虽然这个目录是一个通用的标准,但它 只适用于战争包装,它是默默忽视了大多数

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

        3
  •  0
  •   Yan Burtovoy    4 年前

    它在IDE中工作,因为它知道在哪里可以找到网页。