Java Jetty、DefaultServlet、BlockingCallback和TimeoutException问题
我正在运行一个由Jetty 9.1.0.RC1(独立发行版)支持的在线应用程序 在提供静态内容(.js、.css、.png文件等)时,我的日志文件被以下随机出现的问题填满: 这同样适用于以下资源:Java Jetty、DefaultServlet、BlockingCallback和TimeoutException问题,java,jetty,servlet-3.0,continuation,Java,Jetty,Servlet 3.0,Continuation,我正在运行一个由Jetty 9.1.0.RC1(独立发行版)支持的在线应用程序 在提供静态内容(.js、.css、.png文件等)时,我的日志文件被以下随机出现的问题填满: 这同样适用于以下资源: 2013-11-26 15:09:01.219:WARN:oejs.ServletHandler:qtp1207851091-629: /Resources/Audio/IncomingMessage.wav 2013-11-25 03:02:44.904:WARN:oejs.ServletHand
2013-11-26 15:09:01.219:WARN:oejs.ServletHandler:qtp1207851091-629: /Resources/Audio/IncomingMessage.wav
2013-11-25 03:02:44.904:WARN:oejs.ServletHandler:qtp1207851091-408: /Resources/Website/Users/f3c68328-d739-4680-8144-a0db598dff6b/1384157586003.png
我正在使用Servlet3.0。有两个DefaultServlet实例,一个来自webdefault.xml,另一个来自web.xml,用于提供用户图像(未与.war文件捆绑)
前一个DefaultServlet的配置没有修改,后一个如下:
<servlet>
<servlet-name>DefaultImagesServlet</servlet-name>
<servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
<init-param>
<param-name>resourceBase</param-name>
<param-value>/echat/static/</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DefaultImagesServlet</servlet-name>
<url-pattern>/Resources/*</url-pattern>
</servlet-mapping>
DefaultImagesServlet
org.eclipse.jetty.servlet.DefaultServlet
资源库
/echat/静态/
DefaultImagesServlet
/资源/*
我已经花了三天的时间想弄明白这件事,但我还是被卡住了。我没有在应用程序的任何地方明确使用Continuation
该问题仅在码头(重新)启动后几天发生
有什么线索可以找到答案吗?看来我已经用尽了所有可能的选择
亲切问候,
Michael Zyskowski第二个DefaultServlet应该还有一个init参数
DefaultImagesServlet
org.eclipse.jetty.servlet.DefaultServlet
资源库
/echat/静态/
仅路径信息
真的
DefaultImagesServlet
/资源/*
您看到的空闲超时来自活动(未关闭)连接,其中在一段时间内没有任何事情发生
此外,您还应该捕获HTTP流量,与返回的内容相比,发出的请求可能有问题。了解请求/响应头是HTTP/1.0
和keep-alive
状态,还是HTTP/1.1
和坏连接
状态尤为重要
另一件事是在测试时在调试级别启用以下日志记录(如果在Jetty本身中使用回退StdErrLog日志记录)
这将显示所请求的资源与试图在磁盘上找到的资源
示例:假设问题中的DefaultImagesServlet的原始配置
对/Resources/scripts/main.js
的请求将在文件系统中查找文件/echat/static/Resources/scripts/main.js
。此行为与映射到路径规范“/”
的servlet规范“default”
(命名)servlet行为的特殊要求一致
使用pathInfoOnly
设置,对/Resources/scripts/main.js
的请求将从文件系统/echat/static/scripts/main.js
中提取,这与普通servlet的行为更为一致
<servlet>
<servlet-name>DefaultImagesServlet</servlet-name>
<servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
<init-param>
<param-name>resourceBase</param-name>
<param-value>/echat/static/</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DefaultImagesServlet</servlet-name>
<url-pattern>/Resources/*</url-pattern>
</servlet-mapping>
System.setProperty("org.eclipse.jetty.servlet.LEVEL","DEBUG");