将JS从文件系统加载到Spring Boot jar应用程序(使用Thymeleaf)



我有一个用弹簧启动制成的实用程序,将捆绑的雄猫打包到可执行的jar中。我需要的是将一些 JS(或可能是 JSON)文件与 JAR 文件放在同一个文件夹中,并能够将它们插入到 Thymeleaf 模板中。例如

<script type="text/javascript" src="somepath/myfile.js"></script>

到目前为止,我已经设法做到了这一点:在控制器中:

String userDir = System.getProperty("user.dir");
model.addAttribute("userDir", "file://"+userDir+"/");

在模板中:

<script type="text/javascript" th:src="${userDir + 'myfile.js'}"></script>

目前,我能够通过Firebug html视图查看myfile中的代码.js但不是在"脚本"选项卡中,也没有执行脚本(此文件中定义的任何变量都是未定义的)。

怎么办?

我知道我可以创建一个 json 文件并通过 java 处理它,但是如果我正在寻找的解决方案存在,它对我来说使用起来更简单、更方便,而且这样我就可以使用自定义 js,而不仅仅是 json。

我也知道这在许多情况下是非常不安全的,但在这种情况下,无论想要通过文件注入什么,应用程序都不必是安全的。

您可以自定义 WebMvcConfigurationAdapter 以将一些文件系统文件夹添加到资源注册表。

@Configuration
public class CustomWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
    @Value("${resources}")
    private String resources;
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        if (resources != null) {
            registry.addResourceHandler("/myresources/**").addResourceLocations("file:" + resources);
        }
        super.addResourceHandlers(registry);
    }
}

然后在执行 JAR 时提供 --resources 参数。请注意尾随/

java -jar your_jar_file --resources=/path/to/resources/

另请注意,此路径中的资源是针对 /myresources/ 路径注册的,因此您需要按如下方式修改模板

<script type="text/javascript" src="myresources/myfile.js"></script>

myfile.js 应该出现在 --resources 参数中提到的路径中

更新#1(我还没有测试过,但你可以试试)

刚刚发现 spring boot 支持自定义静态位置的属性

请参阅弹簧通用属性附录

您需要在 application.properties 中定义的属性如下

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

将您的位置附加到其中。您也可以像使用文件资源一样

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:/tmp/resources

相关内容

最新更新