当前位置: 首页 > 知识库问答 >
问题:

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

弓玉书
2023-03-14

我有一个使用Maven构建的Spring MVC的网络应用程序。当我生成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个答案

苏昂雄
2023-03-14

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

戚逸清
2023-03-14

请参考有关提供静态内容的Spring Boot文档。

值得注意的是:

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

...

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

...

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

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

那开济
2023-03-14

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

也改变

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

ModelAndView(“模板/测试块”)ModelAndView(“测试块”)以解决404错误。

 类似资料:
  • 但是当我进行构建时,它无法编译一些引用webapp/WEB-INF/lib文件夹的jar的类。我不能将这些JAR作为依赖项包含在pom.xml中。 如何告诉maven在构建类和创建WAR时也包含WEB-INF/Lib JAR?

  • 我正在开发一个由以下结构组成的web应用程序: 在此输入图像说明 当我执行mvn clean package时,webapp中没有文件打包到jar中。

  • 我是Java开发的新手,这里有一个问题:我生成了web应用程序 ,然后我添加了文件夹和简单的文件。通过命令在my localhost:8080/manager中,我可以看到我的web应用程序,但是我如何在其中添加我的jar文件呢?

  • 我在webapp/WEB-INF/lib/文件夹下添加了一个依赖项。 当我使用maven构建时,我希望在war中将它复制到WEB-INF/lib,而不是WEB-INF/classes/WEB-INF/lib。我正在寻找这是使用maven本身来完成的。 我已经在pom文件中提到了打包作为战争,但是依赖项没有被复制。我是不是在pom文件里漏掉了什么。我已经复制了下面的pom: 附上战争内容截图。

  • 我创建了一个带有pom文件的webapp java项目。然后我键入“mvn eclipse: eclipse”并将其导入eclipse。 (顺便说一句,您通常如何将java项目直接导入eclipse?我总是发现eclipse:eclipse工作得很好,只是我必须额外执行以下步骤才能键入eclipse:eclipse) 然后在eclipse中,我编辑并编译了项目,一切正常。但是,当我在eclipse

  • 正在寻找旧JSF页面的解决方案。我试图使用contains方法根据另一列是否包含单词red box来呈现组合框。 这一个工作和组合框被禁用。 但是,我也想在值不包含红色框时渲染它们,但随后将启用combox。 这是行不通的。 因此,我如何测试的任何想法都不包含特定的单词。我还尝试了choose test when,但由于第一个表。col4值只是一个空字符串。 有什么想法吗?谢谢。