在 Jetty 中从 Web 应用程序外部的文件夹提供文件

发布于 2024-12-18 16:02:30 字数 362 浏览 2 评论 0原文

我在 Jetty 服务器上有一个 Java Web 应用程序 (Eclipse/OSGI)。我希望能够从 Web 根目录之外的文件夹向我的 Web 应用程序提供静态文件。在我的 Web 应用程序中,我还不知道要提供服务的文件的文件名,因此我想在启动 Web 应用程序时将文件名(和/或路径)作为 VM 参数。例如:

我有一个图像 - myImg.jpg - 我已将其放入服务器文件系统上的文件夹中,例如 root/images/myImg.jpg。我想将其作为VM参数,例如“-DmyImg=/images/myImg.jpg/”,以便我可以获取图像并将其显示在我的网页上。我怎样才能做到这一点?我可以在不创建新的 Servlet 的情况下执行此操作吗?

预先感谢您的任何帮助!

I have a Java web application (Eclipse/OSGI) on a Jetty server. I want to be able to serve static files to my web application from a folder outside of the web root. In my web application, I don't yet know the file name of the file I want to be served, so I want to take the filename (and/or path) as a VM parameter when I start my web application. For example:

I have an image - myImg.jpg - that I have put in a folder on the server file system, for example root/images/myImg.jpg. I want to take this as a VM parameter, e.g. "-DmyImg=/images/myImg.jpg/" so that I can get the image and display it on my web page. How can I accomplish this? Can I do this without creating a new Servlet?

Thanks in advance for any help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怼怹恏 2024-12-25 16:02:30

解决了!

这是我添加到 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>

Solved it!

This is what I added to my jetty.xml file:

<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>
子栖 2024-12-25 16:02:30

@Farna:在您的回答中,我无法理解您如何将文件名作为 VM 参数传递。这就是我所做的。

我在 jetty webapps 目录中创建了 testparvez.xml 文件。

    <?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>

然后我启动 jetty

java -jar start.jar jetty.port=8082 -Dmydir=C:/test/javadoc/ -Dmyfile=index.html

最后从 url http://localhost:8082/testparvez/ 访问

@Farna: In your answer I am not able to understand how you are passing the file name as VM parameter. This is what I did.

I created testparvez.xml file in jetty webapps directory.

    <?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>

Then I start jetty as

java -jar start.jar jetty.port=8082 -Dmydir=C:/test/javadoc/ -Dmyfile=index.html

And finally I access from url http://localhost:8082/testparvez/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文