【问题标题】:How serve web-folder in Spring Boot out from /resources/如何在 Spring Boot 中从 /resources/ 中提供 web 文件夹
【发布时间】:2019-07-15 15:11:16
【问题描述】:

我需要帮助,我的 Spring Boot 2 服务器从第一个 Web 生成其他网站(带有 html、css ext ext 的文件夹),但是这些网站/html 无法访问,Spring 给我错误 404,未找到。

我将在 .jar 中使用 Maven 构建项目

项目的名称是这样的:

---
 |_folder (Directory with webapps generated, NOT DELIVERED)
 . |_webapp1
 . |_webapp2
 |_src
 . |_main
 . . |_java
 . . |_resources
 . . . |_public (With first web)
 . . . |_static (Template used to generate other web site, i simply copy this directoy in other directory, doing  templateServices.copyDirectory("target/classes/static/", "folder/webapp1");
---

我尝试了这种配置,但不起作用。

@Configuration
@EnableWebMvc
public class StaticResourceConfiguration implements WebMvcConfigurer {

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

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

【问题讨论】:

  • 你能显示一些代码吗?
  • 关于什么?非常感谢您的支持
  • 啊,你没有代码。至少正确解释你想要做什么?您有一个 Spring Boot 应用程序,它在 public 目录中生成一个静态网站,然后您希望能够从创建这些网站的同一个应用程序交付该网站?
  • Spring Boot 2 的 jar 必须交付用户生成其他网站的第一个网站。 jar 生成“文件夹”,所有这些网站在 public static final String uploadingDir = System.getProperty("user.dir");
  • 我没有代码交付生成的网站,Spring boot的配置是默认的,我尝试了addResourceHandlers,但没有,tomcat嵌入不交付这些新的webapp。我把这段代码贴出来。

标签: java spring spring-boot web directory


【解决方案1】:

如果 Web 服务器要生成网站,如您所说,那么您应该将文件保存在 Spring Boot 范围之外;就在文件系统的文件夹中。一个例子可能是:

@Configuration
@EnableWebMvc
public class AppConfig implements WebMvcConfigurer {
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry
        .addResourceHandler("/**")
        .addResourceLocations("file:/var/www/websites/");
  }
}

如果你有动态网站(你说它取决于用户)你可以在方法内部获取系统中的所有用户,并在特定位置为他们添加 ResourceHandlers。

【讨论】:

  • 我也是这样做的,在第一篇文章中检查我的代码,但不起作用。
  • 可以是百里香的问题吗?因为已启用。
  • 看我的例子,前缀是file:,而不是classpath:。我只是试了一下,它工作得很好。当然,如果您必须解析 Tymeleaf 模板并进行一些额外的处理,您将需要不同的策略来呈现网站。我以为你真的在生成静态 HTML 文件?
  • 我调试了,我生成的字符串是“file:C:\\Users\\username\\IdeaProjects\\transfer/folder/”,可以吗?也许这就是问题所在。我生成了一个具有特定 html 的 Web 应用程序,该应用程序获取从用户上传的文件,并将其放在具有相同名称的特定文件夹中。现在我试图解决这个问题,因为 .html 不是个性化的。
  • 不正确,不。对于 Windows,它将是:file:///C:/Users/username/IdeaProjects/transfer/folder/。试试看!
猜你喜欢
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 2021-12-26
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
相关资源
最近更新 更多