2013-05-07 88 views
1

我现在为我的静态内容使用Spring MVC的Web应用我“MVC:资源...”标签,设置像这样在我的servlet上下文的URL映射和资源位置:静态资源的位置动态映射

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

这很好,但我想要做的就是将“位置”设置为在应用程序中动态配置的文件系统路径(存储在数据库中)。这可能吗? (我认为这将需要发生Spring上下文初始化后,这样我就可以抓住从一个服务调用的结果,但我似乎无法想出一个办法,使工作。)

+0

现在我想想,我不认为这会让你把文件系统的相对路径,相对于应用程序上下文路径唯一,出于安全原因。这个''标签用于css,js,图标,即。 web应用程序资源。 – 2013-05-07 15:58:23

+0

谢谢,Sotirios。如果我正确地阅读文档,那么如果您使用'file:/'前缀,您似乎可以指定应用程序根目录之外的位置。这里的问题是,我不知道那条路,并且希望能够动态地设置它... – 2013-05-07 16:11:52

+0

使用扩展这个类的编程配置:http://static.springsource.org/spring/docs /3.1.x/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurerAdapter.html。 – 2013-05-07 16:17:08

回答

2

这应该足够

@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); 
    } 

} 

如何获得path是一个不同的故事。也许可以使用@Autowired@Bean数据源来获取连接并查询数据库中的路径。

+0

有没有什么办法可以让应用程序上下文初始化(即如果资源位置在运行时改变)执行?谢谢! – 2013-05-07 16:39:12

+0

我想一个更好的方式来说这个问题是我是否可以将ResourceHandlerRegistry注入到我在运行时使用的bean中? – 2013-05-07 16:45:19

+0

@BillMarkmann我不知道你可以,可能是一个黑客做到这一点。这是在您的servlet容器初始化您的应用程序时完成的。运行时是什么意思?在你的配置类中,你可以有其他的'@ Bean's。你可以使用这个方法中的那些。 – 2013-05-07 17:07:03