2

我的 MVC 应用程序需要访问 servlet 上下文之外的缩略图和视频文件。因此,我将 servlet-context.xml 设置为具有以下内容:

<resources mapping="/resources/**" location="/resources/,file:/home/john/temp_jpgs/" />

因此 /home/john/temp_jpgs/ 中的图像可供 /resources 下的任何 jsp 使用。

但是,这仅用于测试,我希望能够以编程方式设置此位置。我怎么做?

谢谢,约翰。

4

1 回答 1

4

如果<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>

您现在可以将resourceHandlerbean 注入任何其他类,调用 setter 以yourCustomPath编程方式设置和更改它。

于 2013-01-18T03:37:50.460 回答