我在Jetty服务器上有一个Java Web应用程序(Eclipse / OSGI)。我希望能够从Web根目录之外的文件夹向我的Web应用程序提供静态文件。在我的Web应用程序中,我还不知道我想要提供的文件的文件名,因此我想在启动Web应用程序时将文件名(和/或路径)作为VM参数。例如:
我有一个图像 - myImg.jpg - 我已将其放在服务器文件系统的文件夹中,例如root / images / myImg.jpg。我想将其作为VM参数,例如“-DmyImg = / images / myImg.jpg /”这样我就可以获取图像并将其显示在我的网页上。我怎么能做到这一点?我可以不创建新的Servlet吗?
提前感谢您的帮助!
答案 0 :(得分:11)
解决了!
这是我添加到jetty.xml文件中的内容:
<Set name="handler">
<New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<New class="org.eclipse.jetty.server.handler.ContextHandler">
<Set name="contextPath">/myContextPath</Set>
<Set name="handler">
<New class="org.eclipse.jetty.server.handler.ResourceHandler">
<Set name="directoriesListed">false</Set>
<Set name="resourceBase">/actual/folder/on/file/system</Set>
</New>
</Set>
</New>
</Item>
[...other handlers...]
</Array>
</Set>
</New>
</Set>
答案 1 :(得分:3)
@Farna:在你的回答中,我无法理解你如何将文件名作为VM参数传递。这就是我所做的。
我在jetty testparvez.xml
目录中创建了webapps
文件。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.eclipse.org/configure.dtd">
<Configure class="org.eclipse.jetty.server.handler.ContextHandler">
<Set name="contextPath">/testparvez</Set>
<Set name="resourceBase"><SystemProperty name="mydir"/></Set>
<Set name="handler">
<New class="org.eclipse.jetty.server.handler.ResourceHandler">
<Set name="welcomeFiles">
<Array type="String">
<Item><SystemProperty name="myfile"/></Item>
</Array>
</Set>
<Set name="cacheControl">max-age=3600,public</Set>
</New>
</Set>
</Configure>
然后我开始码头
java -jar start.jar jetty.port=8082 -Dmydir=C:/test/javadoc/ -Dmyfile=index.html
最后我从网址http://localhost:8082/testparvez/