Jetty无法提供来自Servlet 3 META-INF /资源JAR的文件?

时间:2016-02-12 10:10:36

标签: java servlets jetty jetty-9

我正在使用来自我的前端依赖项的WebJars并从Jetty 9.3.2提供它们。 Spring MVC用于映射资源。

问题通常在代码部署后一天左右浮出水面。资源文件将返回404或500堆栈,如:

java.io.FileNotFoundException: ServletContext resource [/webjars/angular-ui-select/0.13.1/select.js] cannot be resolved to URL because it does not exist
    at org.springframework.web.context.support.ServletContextResource.getURL(ServletContextResource.java:156)
    at org.springframework.core.io.AbstractFileResolvingResource.lastModified(AbstractFileResolvingResource.java:166)
    at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:240)
    at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)
...

根据源和内存转储,如果org.eclipse.jetty.webapp.WebAppContext.Context.getResource(String)为先前找到的资源返回null,则抛出此异常。

我非常怀疑这是jetty中的一个错误,因为它无法提供服务的文件也会随着时间而变化。

我已查看更改日志,但无法查看相关信息。

有没有人见过这样的东西?

编辑:

我跟踪堆转储的可能代码路径,似乎唯一可能的原因是JarFileResource.exists()错误地返回false。但是,除了该方法存在潜在的线程安全问题之外,我也无法找到任何问题。该方法的Btrace显示它在所有情况下都正确返回,即使在跟踪期间抛出了上述异常。

JarURLConnection缓存功能存在潜在问题。但是,我从未见过任何"文件关闭异常"这表明这个错误。 (JarFileResource类层次结构是btrace&d;并且所有捕获的异常都是由Jetty搜索每个JAR中的资源引起的预期FileNotFoundException。)

0 个答案:

没有答案