Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 静态资源位置动态映射_Spring_Spring Mvc - Fatal编程技术网

Spring 静态资源位置动态映射

Spring 静态资源位置动态映射,spring,spring-mvc,Spring,Spring Mvc,目前,我使用Spring MVC的“MVC:resources…”标记为我的webapp提供静态内容,在我的servlet上下文中设置URL映射和资源位置,如下所示: <resources mapping="/resources/**" location="/resources/" /> 这可以很好地工作,但我希望能够将“位置”设置为在应用程序中动态配置的文件系统路径(存储在数据库中)。这可能吗?(我认为这需要在spring上下文初始化之后发生,这样我就可以从服务调用中获取结果

目前,我使用Spring MVC的“MVC:resources…”标记为我的webapp提供静态内容,在我的servlet上下文中设置URL映射和资源位置,如下所示:

<resources mapping="/resources/**" location="/resources/" />

这可以很好地工作,但我希望能够将“位置”设置为在应用程序中动态配置的文件系统路径(存储在数据库中)。这可能吗?(我认为这需要在spring上下文初始化之后发生,这样我就可以从服务调用中获取结果,但我似乎无法找到一种方法使其工作。)

这应该足够了

@Configuration
@EnableWebMvc
public class Bootstrap extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        String path = "file:" + ...;  // 'file:/' or 'file:' depending on how your path is formatted
        registry.addResourceHandler("/resources/**").addResourceLocations(path);
    }

}

如何获得路径是另一回事。可能使用
@Autowired
@Bean
数据源来获取连接并查询数据库中的路径。

现在考虑一下,出于安全原因,我认为它不允许您获取文件系统相对路径,只允许获取与应用程序上下文相关的路径。此
标记用于css、js、图标,即web应用程序资源。谢谢,Sotirios。如果我正确地阅读了文档,那么如果使用“file:/”前缀,似乎可以在应用程序根目录之外指定一个位置。这里的问题是,我事先不知道该路径,希望能够动态设置它…使用扩展此类的编程配置:。是否有任何方法可以在应用程序上下文初始化后执行该路径(即,如果资源位置在运行时更改)?谢谢我想更好的表达这个问题的方式是,我是否可以将ResourceHandlerRegistry注入我在运行时使用的bean…?@BillMarkmann我不知道你可以,可能是一个黑客。这是在servlet容器初始化应用程序时完成的。你说的运行时间是什么意思?在您的配置类中,您可以有其他
@Bean
s。你可以用这个方法里面的那些。谢谢——让我试试这个;如果成功的话,我会把你作为答案。谢谢,我成功了。在应用程序初始化之后,您似乎无法更新ResourceHandler,但这并不是我的用例的一个障碍(为了我自己的利益,我试图变得有点太狡猾)。任何后来遇到这个问题的人,我要做的唯一一件事就是将cglib和asm添加到我的Maven POM中。