如果<resources ...
标签不能满足您的需求,您可以继承ResourceHttpRequestHandler以包含您需要的任何功能。
示例:自定义位置的子类 ResourceHttpRequestHandler
package com.test;
public class MyCustomResourceHttpRequestHandler extends ResourceHttpRequestHandler {
private String yourCustomPath;
@Override
protected Resource getResource(HttpServletRequest request) {
String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
...
//put whatever logic you need in here
return new FileSystemResource(yourCustomPath + path);
}
public void setYourCustomPath(String path){
this.yourCustomPath = path;
}
}
现在,您可以删除<resources ...
标签并在上下文中注册您的处理程序,如下所示。然后,进来的请求/resources/**
将被路由到您的自定义类。您基本上可以通过设置器location
更改yourCustomPath
变量来控制 。
<bean name="resourceHandler" class="com.test.MyCustomResourceHttpRequestHandler">
<property name="locations">
<list>
<!-- you'll be overriding this programmatically -->
<value>/resources/</value>
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/resources/**" value-ref="resourceHandler"/>
</map>
</property>
</bean>
您现在可以将resourceHandler
bean 注入任何其他类,调用 setter 以yourCustomPath
编程方式设置和更改它。