Java 在Servlet中创建1x1透明gif

Java 在Servlet中创建1x1透明gif,java,servlets,Java,Servlets,下面的问题让我缺乏理解。 我想创建一个1x1透明gif,它将由servlet提供: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/gif"); byte[] trackingGif = { 0x47, 0x49, 0x46, 0x

下面的问题让我缺乏理解。 我想创建一个1x1透明gif,它将由servlet提供:

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不会两次调用它

怎么了?这真的不是一个有效的图像吗


提前感谢。

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的副作用

如果图像保持不变,为什么不使用静态图像文件呢?这只是一个示例。当然,如果问题已经解决,那么在servlet初始化时,字节数组将只创建一次。我认为Firebug和Firefox是wll,但不幸的是,这不是问题所在。同样在禁用Firebug时,Servlet被调用两次。