以下问题让我缺乏理解。 我想创建一个由servlet提供的1x1透明gif:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("image/gif");
byte[] trackingGif = { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x1, 0x0, 0x1, 0x0, (byte) 0x80, 0x0, 0x0,
(byte) 0xff, (byte) 0xff, (byte) 0xff, 0x0, 0x0, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0,
0x0, 0x2, 0x2, 0x44, 0x1, 0x0, 0x3b };
BufferedImage singlePixelImage = new BufferedImage(1, 1, BufferedImage.TYPE_4BYTE_ABGR);
Color transparent = new Color(0, 0, 0, 0);
singlePixelImage.setRGB(0, 0, transparent.getRGB());
response.setContentType("image/gif");
response.getOutputStream().write(trackingGif);
}
如果我从Firefox调用Servlet,Servlet总是被调用两次,Firebug告诉我"无法加载URL"并显示一个破碎的图像。
例如,Chrome不会再拨打两次电话。Waht是错的?这真的不是一个有效的形象吗?
提前致谢。
答案 0 :(得分:1)
GIF数据看起来不错。但是,如果您已有数据,为什么要重新创建呢?
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
byte[] trackingGif = { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x1, 0x0, 0x1, 0x0, (byte) 0x80, 0x0, 0x0,
(byte) 0xff, (byte) 0xff, (byte) 0xff, 0x0, 0x0, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0,
0x0, 0x2, 0x2, 0x44, 0x1, 0x0, 0x3b };
response.setContentType("image/gif");
response.setContentLength(trackingGif.length);
OutputStream out = response.getOutputStream();
out.write(trackingGif);
out.close();
}
两次调用servlet我相信是运行Firefox + Firebug的副作用。 bug