2

私のMVCアプリケーションは、サーブレットコンテキスト外のサムネイルとビデオファイルにアクセスする必要があります。そこで、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をサブクラス化して、必要な機能を含めることができます。

例: カスタム Location の 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 に答える