我在一个基于Spring的应用程序中嵌入了Jetty。我在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中定义的URL(例如jar:file:/myapp.jar!/config/web
),但它似乎不支持类路径URL。如果我定义类似classpath:config/web
的内容,我会收到IllegalArgumentException。
这对我来说真的很痛苦。有没有人知道要实现这个功能?
谢谢,
安德鲁
答案 0 :(得分: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()}" />