Servlets 码头服务形象的陌生感

Servlets 码头服务形象的陌生感,servlets,png,jetty,md5,lift,Servlets,Png,Jetty,Md5,Lift,我完全被难住了。为了方便起见,我将提供背景资料 完整性,但我不确定这是否会有帮助。我在一个标准的码头上运行一个电梯项目,运行一个电梯实例。MacOSX 我有一个片段,它转换XML输入,呈现图像,将其保存到webroot/images/目录下的光盘中,文件名取自内容的MD5,例如 “c5669d3eedcf7d305dcf9f88a61b3ee0.png”。然后,代码段返回一个img标记,其中包含对生成图像的引用,以便包含在输出中 大多数情况下,大多数图像都能正常工作。但大多数情况下,它们中的一些

我完全被难住了。为了方便起见,我将提供背景资料 完整性,但我不确定这是否会有帮助。我在一个标准的码头上运行一个电梯项目,运行一个电梯实例。MacOSX

我有一个片段,它转换XML输入,呈现图像,将其保存到webroot/images/目录下的光盘中,文件名取自内容的MD5,例如 “c5669d3eedcf7d305dcf9f88a61b3ee0.png”。然后,代码段返回一个img标记,其中包含对生成图像的引用,以便包含在输出中

大多数情况下,大多数图像都能正常工作。但大多数情况下,它们中的一些并没有这样做,而且一些图像并不是由浏览器渲染的。试图在浏览器(Camino和Firefox)中查看有问题的图像不起作用:图像没有显示,这表明有点模糊的错误

在另一个浏览器(Safari和QuickTime)中查看,图像效果良好。下载并打开图像效果良好。使用Camino直接查看文件时(即。file://...),图像显示良好:文件本身没有明显损坏

它不能是文件名的长度,因为所有文件名都是相同的37个字符

我只能假设,当通过码头服务时,图像的传输出现了问题

确实失败的URI,持续失败,它不是间歇性的。重新启动Jetty没有什么区别,所以我不认为该文件是在服务器启动后创建的。此外,渲染是一个阻塞调用,因此文件不可能仍然处于打开状态/ 在发送HTML和浏览器请求图像之前未保存

我唯一能想象的是MIME类型被破坏了,所以我在web.xml中放置了适当的映射,但仍然没有。MIME类型看起来正常,我已经验证了字节数是否正确

对于问题图像:

HTTP/1.1 200 OK Expires: Thu, 01 Jan 1970 00:00:00 GMT Set-Cookie: JSESSIONID=1dbeh8eq4mtu0;Path=/ Content-Type: image/png Content-Length: 25488 Last-Modified: Sat, 25 Jul 2009 15:38:19 GMT Server: Jetty(6.1.16) HTTP/1.1200ok 到期时间:1970年1月1日星期四格林威治标准时间00:00:00 设置Cookie:JSESSIONID=1dbeh8eq4mtu0;路径=/ 内容类型:图像/png 内容长度:25488 最后修改:2009年7月25日星期六15:38:19 GMT 服务器:Jetty(6.1.16) 为完整性起见,来自确实加载的图像的标题将很好:

HTTP/1.1 200 OK Expires: Thu, 01 Jan 1970 00:00:00 GMT Set-Cookie: JSESSIONID=15dt649lzovc4;Path=/ Content-Type: image/png Content-Length: 18657 Last-Modified: Sat, 25 Jul 2009 15:41:35 GMT Server: Jetty(6.1.16) HTTP/1.1200ok 到期时间:1970年1月1日星期四格林威治标准时间00:00:00 设置Cookie:JSESSIONID=15dt649lzovc4;路径=/ 内容类型:图像/png 内容长度:18657 最后修改:2009年7月25日星期六15:41:35 GMT 服务器:Jetty(6.1.16) 对此感到非常困惑。有什么线索吗

干杯


Joe

我不确定您稍后是从curl/wget测试URL,还是使用数据包嗅探器来获取头,但以防万一是前者。我会尝试使用这样的工具来验证发送到Firefox的实际数据是否符合预期数据


唯一让我印象深刻的是尺寸上的差异。通常较大的图像会失败吗?如果是这样的话,我会说它破坏了文件的缓冲/刷新

我也有类似的问题。在我看来,Jetty似乎将图像视为文本,并尝试将其编码为UTF-8。我制作了只包含7位数据的测试数据,它工作得很好,但是当数据包含设置了第8位的字节时,它会被转换成多个字节,就像UTF-8编码一样

由于PNG文件总是以字节0x89、0x50、0x4e、0x47开头,当由中断的Jetty设置提供服务时,第一个0x89将转换为0xef、0xbf、0xbd。这是UTF-8代码0xfffd,AFAIK的意思是“错误的UTF字符”,或者别的什么


我认为这一定是环境中的某种东西,因为相同的设置在我自己的Mac和Linux机器上工作,但在其他Linux机器和一台Windows机器上不断失败。

您是从罐子中提供服务的吗?我也有同样的问题,但只适用于带有透明层的PNG,并且只适用于从罐子中取出的PNG。如果我对它进行卷曲,它会立即弹出100%,但会继续“下载”,直到达到30秒超时