2

SpringベースのアプリケーションにJettyを埋め込んでいます。JettyサーバーをSpringコンテキストファイルで構成します。私が問題を抱えている構成の特定の部分はこれです:

<bean class="org.eclipse.jetty.webapp.WebAppContext">
   <property name="contextPath" value="/" />
   <property name="resourceBase" value="????????" />
   <property name="parentLoaderPriority" value="true" />
</bean>

上記のように、????????を配置した場合、理想的には、resourceBaseがクラスパス上のフォルダーを参照するようにします。アプリケーションを単一の実行可能JARファイルにデプロイしていてconfig/web/WEB-INF、クラスパスにフォルダーがあります。

JettyはresourceBase(eg jar:file:/myapp.jar!/config/web)で定義されたURLを処理できるようですが、クラスパスURLをサポートしていないようです。のようなものを定義すると、IllegalArgumentExceptionが発生しますclasspath:config/web

これは私にとって本当に苦痛です。とにかくこの機能を実現する方法を知っている人はいますか?

ありがとう、

アンドリュー

4

1 に答える 1

5

リソースをSpringとして取得し、次のようにResource呼び出す必要があります。getURI().toString()

public class ResourceUriFactoryBean extends AbstractFactoryBean<String> {

    private Resource resource;

    public ResourceUriFactoryBean(Resource resource) {
        this.resource = resource;
    }

    @Override
    protected String createInstance() throws Exception {
        return resource.getURI().toString();
    }

    @Override
    public Class<? extends String> getObjectType() {
        return String.class;
    }    
}

-

<property name="resourceBase">
    <bean class = "com.metatemplating.sample.test.ResourceUriFactoryBean">
        <constructor-arg value = "classpath:config/web" />
    </bean>
</property>

-

または、Spring 3.0の表現言語を使用したよりエレガントなアプローチ:

<property name="resourceBase" 
    value = "#{new org.springframework.core.io.ClassPathResource('config/web').getURI().toString()}" /> 
于 2010-05-14T11:13:23.237 に答える