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

Spring boot静态资源映射ant matchers与ResourceHandlerRegistry

孙朗
2023-03-14

我使用Spring Boot1.3.3我的应用程序资源存在于src/main/Resources/静态下例如:src/main/Resources/静态/index.html我试图映射我的静态资源与前缀像/*/资源/**
以便它匹配网址像 /main/resource/**和 /app/resource/**

当我尝试使用以下代码时

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
        "classpath:/META-INF/resources/", "classpath:/resources/",
        "classpath:/static/", "classpath:/public/" };

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/*/resource/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
}

当我请求域:8080/app/resource/index时,它会出现一个404。html

但在执行domain:8080/index时返回请求的页面。html(看起来有些默认匹配器正在覆盖我尝试配置的匹配器。)

当我使用下面的代码时

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/app/resource/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
}

它返回页面域:8080/app/Resources/index.html。

我上面使用的蚂蚁匹配器有什么问题吗?我可以用我想要的方式使用静态资源吗?

谢谢你的帮助。。

共有1个答案

蓬英逸
2023-03-14

我遇到了完全相同的问题,并找到了解决办法。

根据“SpringBoot食谱”,ResourceHandlerRegistry使用ant样式的模式。此外,我还遇到了“Spring:关于路径的/**和/*的区别”,Devabc指出。。

请注意,Springs的AntPathMatcher包含bug:它不完全符合Ant模式样式。示例:*/*。css不适用于以/开头的路径,但它应该符合Ant风格的约定Devabc 6月12日15时9分52分

为了匹配URL,如http://localhost:8080/frontend/13/style.css,其中13个可能有所不同,请尝试以下方法:

/* This did NOT work */
registry.addResourceHandler("/frontend/{id:[0-9]+}/**").addResourceLocations("classpath:/web-app/dist/");

/* This DID work, when removing the preceeding / */
registry.addResourceHandler("frontend/{id:[0-9]+}/**").addResourceLocations("classpath:/web-app/dist/");

所以对你来说,这意味着:尝试删除URL中前面的/,即。

registry.addResourceHandler("*/resource/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
 类似资料:
  • 主要内容:WebJars 映射,默认静态资源映射在 Web 应用中会涉及到大量的静态资源,例如 JS、CSS 和 HTML 等。我们知道,Spring MVC 导入静态资源文件时,需要配置静态资源的映射;但在 SpringBoot 中则不再需要进行此项配置,因为 SpringBoot 已经默认完成了这一工作。 Spring Boot 默认为我们提供了 3 种静态资源映射规则: WebJars 映射 默认资源映射 静态首页(欢迎页)映射 WebJ

  • 我有以下servlet映射- 我的图像链接在html是"/图像/文件夹/ImageName.jpg"-这些图像给我一个404,而如果更改链接到"/图像/ImageName.jpg"和移动图像直接下的图像文件夹,它得到我的图像。 我是否需要以任何方式修改我的servlet映射以考虑层次结构?

  • 每个网站都需要静态资源:图片、样式表、网站图标(favicon)等。在这种情况下,您可以在项目的根目录下创建一个名为 static 的目录。 放入 该目录中的每个文件都将被复制到 生成的 build 文件夹中,并保留目录的层级结构。例如,如果您将名为 sun.jpg 的文件添加到 static 文件夹中,则该文件将被复制到 build/sun.jpg 路径。 这意味着: 对于 baseUrl: '

  • 问题内容: 如果我在2.0版本中将Jersey的url-pattern映射到,它将为所有静态资源(例如/index.html)造成404。我的具有: 如何使用相同的网址格式投放静态内容? 问题答案: 使用Jersey 1.x,如果你从Jersey servlet切换到过滤器,则应该能够从同一路径提供静态内容。删除你指定的servlet XML并将其切换到: 编辑:在Jersey 2.x中,你应该可

  • 我不确定这些静态资源是如何加载的,但是在我添加了一个新的控制器映射后,我没有在日志中找到静态资源警告消息的映射。 GET/testproject/org/css/style没有映射。css 让我先解释一下我的项目配置,以便更容易理解问题。 所有JSP位置(视图具有不同的文件夹,用于为不同的模块分隔JSP) 静态资源定位 应用性质 在application.properties添加最后一个配置后,现