有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpring5添加静态文件目录webapp

我有一个Spring5(不是SpringBoot)web应用程序。我有一个输出html的控制器。我输出了一个HTML字符串,它可以工作,但是JS内容的相对路径不工作。我将按如下方式布局我的结构:

src
    main
       java
       resources
       webapp
          css
          js
          img
          WEB-INF
          index.html
    test
       java
       resources

当我输出html文本时,无法找到所有相对位置: 如果我打电话: http://localhost:8080/myapp/controller?{某些参数} 我希望 http://localhost:8080/myapp/js/myjsfile.js 我会在那里的。当我构建和部署WAR时,分解的WAR文件包含所有正确的代码。所以我希望文件能在那里找到。然而,从我所读到的内容来看,静态文件可以以不同的方式提供。因此,我有两个问题:

1)从Spring5Web应用程序提供静态文件的标准方式是什么?我是否以这种方式更改结构:

  src
    main
       java
       resources
            static
                css
                js
                img
       webapp
          WEB-INF
          index.html
    test
       java
       resources

然后我想我必须这样做网络配置:

 @Configuration
 @EnableWebMvc
 public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
        registry.addResourceHandler("/resources/**")
        .addResourceLocations("static/js", "static/css", "static/img")
       .setCachePeriod(31556926);
    }
}

2)或者,我是否可以使用现有结构,然后更改WebConfig以添加以下静态位置:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
        registry.addResourceHandler("/webapp/**")
        .addResourceLocations("/js", "css", "img")
       .setCachePeriod(31556926);
    }
}

但是,如果将这些文件放在webapp下不起作用,我可以理解将它们移动到/resources,如果这是标准的做法的话

所以,如果我能在这方面得到任何帮助,那就好了。无论哪种方法,只要有效,我都可以。谢谢


共 (2) 个答案

  1. # 1 楼答案

    选项1是方法,将文件夹放在resources目录下(根据需要命名):

    src/main/java/resources
        myStaticResourcesFolder
            css
            js
            img
    

    那么就这么做:

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**") // map to whatever url you need
            .addResourceLocations("myStaticResourcesFolder/"); // 
    }
    
  2. # 2 楼答案

    尝试使用resources/static文件夹提供查看文件。并将以下配置添加到WebMVCConfigure:

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

    它会将“/”URL中请求的所有静态文件映射到resources/static文件夹