2

我将 Jetty 嵌入到基于 Spring 的应用程序中。我在 Spring 上下文文件中配置我的 Jetty 服务器。我遇到问题的配置的具体部分是:

<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(例如jar:file:/myapp.jar!/config/web)中定义的 URL,但它似乎不支持类路径 URL。如果我定义类似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 回答