Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> показать в JSP картинку из Stream'а, как-бы сделать не прибегая к ф. 
:(
    Опции темы
Sleepy_PIP
Дата 3.6.2005, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: 2
Всего: 12



Собственно думаю, решаю, пока ничего в голову не лезет.
Надо показать в JSP страничке картинку юзеру, которая на сей момент (на момент работы JSP серверлета) находится в памяти.
Пока все сваливаюсь на то, что надо предварительно сохранить в файл, и давать уде ссылку на ф. в страничке ... но не нравится мне это ...


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
batigoal
Дата 3.6.2005, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Наверное, по-другому никак. Разве что в апплете рисовать.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
tux
Дата 4.6.2005, 03:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



А такой вариант не пойдет?
Код

public class ImageServlet extends HttpServlet {
    
    private byte[] imageContent;

    public void init() throws ServletException {
    }

    protected void doGet(
            HttpServletRequest request, 
            HttpServletResponse response) 
        throws ServletException, IOException {
        
        // взяли изображение
        imageContent = imageGenerator.getImage();
        
        // установили контент
        response.setContentType("image/png");
        
        // записали в выходной поток
        response.getOutputStream().write(imageContent);
    }
    
}

и ссылку на сервлет положить в JSP
PM MAIL Skype GTalk Jabber YIM   Вверх
Grelloo
Дата 26.5.2006, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 18.3.2006
Где: г. Екатеринбург

Репутация: нет
Всего: нет



А можно объяснить эту строчку:
Код

        // взяли изображение
        imageContent = imageGenerator.getImage();

Не понятно как массиву byte[] было присвоен тип Image 
PM MAIL ICQ   Вверх
tux
Дата 26.5.2006, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(Grelloo @  26.5.2006,  13:28 Найти цитируемый пост)
Не понятно как массиву byte[] было присвоен тип Image  

Не понял, что за тип Image?

Массив байтов можно по почте получить, по ссылке закачать или из файла прочитать, например, так:
Код

InputStream fis = new FileInputStream("bla-bla.file");
ByteArrayOutputStream image = new ByteArrayOutputStream();
        
byte[] buf = new byte[8192];
        
int readCount = 0;
        
while ((readCount = fis.read(buf)) >=0 )
    image.write(buf, 0, readCount);
        
fis.close();
        
byte[] imageContent = image.toByteArray();
 
PM MAIL Skype GTalk Jabber YIM   Вверх
Grelloo
Дата 26.5.2006, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 18.3.2006
Где: г. Екатеринбург

Репутация: нет
Всего: нет



А если есть просто Image, то его как-то можно преобразовать в поток байт? (То бишь получаем сразу Image например из базы данных) 

Это сообщение отредактировал(а) Grelloo - 26.5.2006, 10:01
PM MAIL ICQ   Вверх
batigoal
Дата 26.5.2006, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Попробуй так:
Код

byte[] buffer = null;
 
try {
    BufferedImage image = ImageIO.read(this.getClass().getResource("images/someimage.jpg"));
    
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ImageIO.write(image, "jpg", bos);
 
    buffer = bos.toByteArray();
} catch (Exception e) {
    e.printStackTrace();
}
 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Grelloo
Дата 26.5.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 18.3.2006
Где: г. Екатеринбург

Репутация: нет
Всего: нет



Написал следующее:
Код

        String LAUNCH = "D:\\books.gif";
        response.setContentType("image/gif");
        ServletOutputStream out = response.getOutputStream();
        try {
        BufferedImage bimage =   ImageIO.read(this.getClass().getResource(LAUNCH));
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ImageIO.write(bimage, "gif", bos); 
        byte[] buffer = null;
        buffer = bos.toByteArray();
        out.write(buffer);
        } catch (Exception e) {
         e.printStackTrace();
        } 

Получаю ошибку:
Код

java.lang.NullPointerException
        at prob.MultiResponse.processRequest(MultiResponse.java:28)

 
PM MAIL ICQ   Вверх
tux
Дата 26.5.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Grelloo, в какой строке исключение вываливается? Телепаты в отпуске. Кроме того, мне совершенно не ясно если ты читаешь массив байтов из файла (или из базы данных или еще откуда-то), то зачем эти промежуточные классы типа BufferedImage, у тебя же здесь изображение два раза хранится. 
PM MAIL Skype GTalk Jabber YIM   Вверх
Grelloo
Дата 5.6.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 18.3.2006
Где: г. Екатеринбург

Репутация: нет
Всего: нет



В конечном итоге у меня получилось следующее:
package com.softmast.webportal.kernel.image;

Код

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;

public class ShowImageServlet extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String LAUNCH = "D:\\tomcat.gif";
        FileInputStream in = new FileInputStream(LAUNCH);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            for (int i = in.read(); i > -1; i = in.read()) {
                out.write(i);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        byte[] rgb = out.toByteArray();
        if (rgb != null) {
            response.reset();
            response.setContentType("image/jpeg");
            response.setContentLength(rgb.length);
            ServletOutputStream stream = response.getOutputStream();
            System.out.write(rgb);
            stream.write(rgb);
            stream.flush();
            stream.close();
        } else {
            response.setContentType("text");
            response.getWriter().write("attribute byteArray not found");
        }
    }
}


Очень удобно, теперь можно в jsp странице передавать картинку, вызывая соответствующий сервлет.  
PM MAIL ICQ   Вверх
tux
Дата 5.6.2006, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Grelloo, у тебя в данном случае не по делу все содержимое картинки загружается в память. Почему бы не писать сразу из входного потока файла в выходной поток response?
Код

String LAUNCH = "D:\\tomcat.gif";

FileInputStream in = new FileInputStream(LAUNCH);
ServletOutputStream out = response.getOutputStream();

response.setContentType("image/jpeg");

for (int i = in.read(); i > -1; i = in.read())
    out.write(i);

out.flush();
out.close();
in.close();

 
PM MAIL Skype GTalk Jabber YIM   Вверх
Grelloo
Дата 5.6.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 18.3.2006
Где: г. Екатеринбург

Репутация: нет
Всего: нет



Пример действительно с точки зрения оптимизации не совсем хорош, но зато можно сделать метод, который бы позволял получать картинку как поток byte, что достаточно удобно 
PM MAIL ICQ   Вверх
garbuz
Дата 25.2.2009, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



У меня похожая проблема, есть бин, у которого одно из полей типa byte [], туда на стороне сервлета помещаю изображение.
Потом через requestDispatcher передаю этот бин на jsp, как мне вытащить изображение и отобразить его на странице?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1347 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.