【问题标题】:Embedded Jetty stops serving static contentEmbedded Jetty 停止提供静态内容
【发布时间】:2018-02-12 21:27:51
【问题描述】:

我有一个嵌入式 Jetty 应用程序,其中 Jetty 提供两件事:

  • 提供一些 HTML/JS 文件
  • 公开我的 Java Servlet 支持的 REST API

JS 文件正在对 servlet 进行 REST 调用。一切都很顺利。

我注意到,在运行大约一周后,API 仍然可以运行,但如果我尝试获取 HTML 文件,我会得到以下信息:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 404 Not Found</title>
</head>
<body><h2>HTTP ERROR 404</h2>
<p>Problem accessing /web/. Reason:
<pre>    Not Found</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.4.v20170414</a><hr/>

</body>
</html>

这里可能出了什么问题?

不确定这是否有意义,但我将其部署在 Amazon AWS EC2 实例中。我无法想象 EC2 正在做某事使 /web 目录消失。

【问题讨论】:

    标签: java servlets amazon-ec2 jetty embedded-jetty


    【解决方案1】:

    我假设您设置 Web 应用程序的 XML 片段看起来像这样:

    <Call name="addHandler">
        <Arg>
            <New class="org.eclipse.jetty.webapp.WebAppContext">
                <Set name="contextPath">/</Set>
                <Set name="war">./path/to/webapp.war</Set>
                <Set name="extractWAR">True</Set>
                <Set name="copyWebInf">True</Set>
            </New>
        </Arg>
    </Call>
    

    发生的情况是战争的内容被提取到系统属性java.io.tmpDir指定的临时目录中的一个目录中。不用自己设置这个目录,这是操作系统的临时目录,e.g. /tmp 在 Linux 上。这在启动期间完成一次,并假定该目录在整个进程运行期间都存在。

    在 Linux 系统上,您经常有一个 cron 作业删除 /tmp 中的旧条目,“照顾”Jetty 需要的这些仍然重要的目录,从而导致这些错误。 servlet 仍然可以访问,因为它们是由类加载器加载的 java 类,因此删除最初加载它们的 jar 并不重要(当然,除非您尝试访问之前未访问过的 servlet )。

    解决方案是自己指定java.io.tmpDir,指向您自己控制的目录。

    【讨论】:

    • 没有 XML 代码,但我以编程方式执行完全相同的操作来设置它。你的建议很有意义。不幸的是,这个应用程序将被部署到许多环境(Windows、RaspPi Linux、Amazon EC2 Linux 等),每个环境都有自己的怪癖。有什么我可以将临时目录设置为可以在任何地方工作的东西吗?非常感谢你的帮助。 (而且很快!)
    • @Sander 我们在应用程序中使用 Jetty,因此我们可以控制安装并相应地设置 java.io.tmpDir 以确保不再发生该问题。一个简短的谷歌搜索想出了stackoverflow.com/questions/19232182/jetty-starts-in-c-temp/…也许这对你有帮助
    • @SanderSmith 或者,您可以尝试将 extractWAR 设置为 false(保持 copyWebInftrue 否则如果 Jetty 尚未修复,您的 servlet 很可能不再工作)。这应该将静态内容排除在文件系统之外。但我没有在实践中尝试过,所以这只是一个猜测。
    猜你喜欢
    • 2019-09-29
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多