Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > glassfish && BufferedImage


Автор: maslyak 29.4.2008, 23:22
доброй ночи, есть простой код servlet, который отлично работает под томкатом - выдает картинку с IP запросившего:
Код

public class IpRanger extends HttpServlet
{
    private static final String CONTENT_TYPE = "image/gif";
    
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
        response.setContentType(CONTENT_TYPE);
        ServletOutputStream out = response.getOutputStream();
        ImageIO.write(drawGraphics(request.getRemoteAddr()), "gif", out);
    }

    private BufferedImage drawGraphics(String ip)
    {
        BufferedImage imgBuff = new BufferedImage(350, 19, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = imgBuff.createGraphics();

        g2.setColor(Color.red);
        g2.drawString(ip, 80, 16);

        return imgBuff;
    }
}

пробую этот код запустить под glassfish последним - выдает в поток вместо рисунка 0 байт, я попробывал для теста еще упростить код - выдавать не в ответ, а записывать в файл
Код

public class Test
{
    private static final String CONTENT_TYPE = "image/gif";

    public static void main(String[] args) throws Exception
    {

        FileOutputStream file = new FileOutputStream("junk");
        BufferedImage img = drawGraphics("hello");
        ImageIO.write(img, "gif", file);
        file.close();
    }

    private static BufferedImage drawGraphics(String ip)
    {
        BufferedImage imgBuff = new BufferedImage(350, 19, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = imgBuff.createGraphics();

        g2.setColor(Color.red);
        g2.drawString(ip, 80, 16);

        return imgBuff;
    }
}

в итоге, если этот файл скомпилить как J2SE - то все отлично, он заполняет файл рисунком. а вот если запустить под glassfish, то в файл пишется 0 байт. Смотрел логи сервера - ничего нет
Что ему не нравится?

Автор: maslyak 29.4.2008, 23:51
кажется я понял в чем дело  smile 
Код

for(String str : javax.imageio.ImageIO.getWriterMIMETypes())
        {
            out.println(str);
        }

я запускал glassfish под J2SE 5.0 и там этот код не выдавал тип gif, поэтому я изменил тип в методе ImageIO.write() на png и оно заработало smile остается гадать, почему же он не выдавал никаких exception, когда я с него требовал кодировать в gif?

Автор: kkorsakoff 30.4.2008, 11:15
А он и не должен согласно javadoc.
Зато должен
Код

Returns:
false if no appropriate writer is found. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)