我有一个嵌入式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目录消失。
1条答案
按热度按时间9rygscc11#
我假设设置web应用程序的xml片段如下所示:
实际情况是,war的内容被提取到由system属性指定的临时目录中的一个目录中
java.io.tmpDir
. 如果不自己设置这个目录,这就是操作系统的临时目录。/tmp
在linux上。这在启动期间执行一次,并假设在进程运行的整个过程中目录都存在。在linux系统上,您经常有一个cron作业,即删除/tmp中的旧条目“处理”jetty需要的这些仍然重要的目录,从而导致这些错误。servlet仍然是可访问的,因为它们是由类加载器加载的java类,所以删除最初加载它们的jar并不重要(当然,您尝试访问以前没有访问过的servlet除外)。
解决这个问题的办法是
java.io.tmpDir
你自己,指向你自己控制的目录。