java嵌入的jetty停止提供静态内容

wz3gfoph  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(344)

我有一个嵌入式jetty应用程序,jetty提供了两个方面:
提供一些html/js文件
公开我的javaservlet支持的restapi
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>

这里会出什么问题?
不确定这是否有意义,但我正在amazonaws ec2示例中部署它。我无法想象ec2会做些什么让/web目录消失。

9rygscc1

9rygscc11#

我假设设置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>

实际情况是,war的内容被提取到由system属性指定的临时目录中的一个目录中 java.io.tmpDir . 如果不自己设置这个目录,这就是操作系统的临时目录。 /tmp 在linux上。这在启动期间执行一次,并假设在进程运行的整个过程中目录都存在。
在linux系统上,您经常有一个cron作业,即删除/tmp中的旧条目“处理”jetty需要的这些仍然重要的目录,从而导致这些错误。servlet仍然是可访问的,因为它们是由类加载器加载的java类,所以删除最初加载它们的jar并不重要(当然,您尝试访问以前没有访问过的servlet除外)。
解决这个问题的办法是 java.io.tmpDir 你自己,指向你自己控制的目录。

相关问题