powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод из сервлета два раза подряд
19 сообщений из 19, страница 1 из 1
Вывод из сервлета два раза подряд
    #39274168
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли из сервлета делать два раза вывод?

Например, если не удается загрузить person.picture , то сервлет будет выводить файл nofoto , но не выводит... и нет сообщения о ошибке из второго кетча. Такое будет работать?

на странице
Код: html
1.
<img src="/getImage?p=<c:out value='${person.picture}'/>" />



в сервлете

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

...
        try (OutputStream out = resp.getOutputStream()) {
            byte[] buf_ = Files.readAllBytes(file.toPath());
            out.write(buf_);
        } catch (Exception e) {

            logger.error("Can not load the image: " + imageFilePath);

            try (OutputStream out1 = resp.getOutputStream()) {

                imageFilePath = path + "uploads" + File.separator + "nofoto.jpg";
                logger.info("--- try load nofoto----- " + imageFilePath);
                File noFotoFile = new File(imageFilePath);
                resp.setContentLength((int) noFotoFile.length());
                byte[] buf_1 = Files.readAllBytes(noFotoFile.toPath());
                out1.write(buf_1);

            } catch(Exception e1) {
                // note that there is no mesagge from here
                logger.error("************** Can not load 'nofoto.jpg' **************");
                e1.printStackTrace();
            }

        }
}
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274190
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,
нельзя.
src у картинок в виде статики. Картинки загружаются в потоке в момент загрузки html.
Делают по другому.
- у картинки делают свойство Невидимый в сервлете
- на событие onLoad Page проверяют в JS какое нибудь условие и либо меняют атрибут src, либо оставляют и включают видимость.
Так можно менять картинки хоть на MouseMove.
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274191
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Невидимый hidden не в сервлете, а в JSP\HTML при вёрстке.
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274195
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, не охота с JS связываться...
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274196
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174Petro123, не охота с JS связываться...
это понятно.
Но не реально.
Страничка отправляется клиенту 1 раз и целиком как вагоны в составе поезда.
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274215
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жееесть, а в чем проблема то? Ну проверьте есть ли байты из первого источника а потом уже пишите. Все равно через память целиком файлы гоняете.
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274226
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Жееесть, а в чем проблема то? Ну проверьте есть ли байты из первого источника а потом уже пишите. Все равно через память целиком файлы гоняете.

тем более что в response пишется длина содержимого. Как только контент пошел к клиенту, поздно метаться и менять файл.
Если подразумевается поток данных без длины в заголовке то подразумевается обработчик на клиенте. можно конечно извратиться и загрузитъ base64 из нескольких картинок (если не пошла первая, в тот же base64 заливать следующую с тегом разделителем), провалидировать загрузку в js и запихнуть нужный кусок как image в канвас. Когда то попадалось похожее решение но давненько это было... да и нестандартное оно. Проще дернуть новый URL для картинки. Чем проще тем лучше и меньше проблем с браузерами.

в примере загрузка картинки в память в массив байт это не очень картуазно если только это не пример показать по быстрому. Небольшие улучшения-

1. Длину содержимого файла в байтах можно взять без чтения File.length()
2. Вместо чтения содержимого в массив байт можно взять file input stream и копировать из него в response output stream используя буффер или если лень что то вроде IOUtils.copy()
3. Exception может быть не только потому что файл не найден или не считывается - может отвалиться клиент и тд. Обработчик открытия потока из файла лучше окружить своим try/catch и принимать решение что отдавать (содержимое одного из файлов или http ошибку) в цикле проверяя файлы по очереди и как только очередной файл подошел(существует, fileinputstream создался), выход из цикла, после того как решение принято что вернуть клиенту (длина данных и поток из файла в наличии и тогда возвращаем содержимое либо их нет), можно переходить к отдаче контента файла или ошибки http в response к клиенту. В внешнем finalize или try/resources позакрывать все что нужно по окончанию.
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274350
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
uid uniqueno56892Все равно через память целиком файлы гоняете.
в примере загрузка картинки в память в массив байт это не очень картуазно если только это не пример показать по быстрому.


а что плохого, в таком способе. могу использовать разные способы, но там размеры картинок маленькие, и думаю это никак не отразится на производительности.
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274385
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,
JSTL не работает?
Типа:
Код: java
1.
2.
<c:set var="urlquerystring"><myTag:getValue type="web" name="person" /></c:set>
<img align="left" src="<c:url value='/getFile/getfile?${urlquerystring}'/>"
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274559
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,

Код: html
1.
<img src="http://url?avatarId=<avatarId>"/>

Если avatarId не найден, возвращаем nophoto
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274563
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123rema174,
нельзя.
src у картинок в виде статики. Картинки загружаются в потоке в момент загрузки html.
Делают по другому.
- у картинки делают свойство Невидимый в сервлете
- на событие onLoad Page проверяют в JS какое нибудь условие и либо меняют атрибут src, либо оставляют и включают видимость.
Так можно менять картинки хоть на MouseMove.ты зачем такую ересь пишешь?
src у картинки в примере /getImage?p=124
сервлет отдаёт байты картинки, браузер её рендерит


// если не удается загрузить person.picture, то сервлет будет выводить файл nofoto
если в outputstream ушло 10 байт первой картинки,
а дальше ты отдаёшь байты второй картинки -- что получит браузер?
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274572
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netты зачем такую ересь пишешь?
src у картинки в примере /getImage?p=124
сервлет отдаёт байты картинки, браузер её рендерит
выше написали:
uid unique Как только контент пошел к клиенту, поздно метаться и менять файл.
не понял постановку автора.
Если он во время отдачи знает что отдавать, тогда ты прав. Нет тут особых проблем.
Если код отдали на клиента, то как я написал выше делается уже правкой DOM.
IMHO
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274579
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123не понял постановку автораесли ты не понял, зачем пишешь ересь?
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274587
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.net,
ты всё понял? - пиши решение и не словоблудствуй тоже.
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274944
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123grasoff.net,
ты всё понял? - пиши решение и не словоблудствуй тоже.п....ц ты упоротый
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274945
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123пиши решение и не словоблудствуй тожезачем ты говоришь людям что-то делать? страна советов никак из головы не выйдет?
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39274997
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174но не выводит...может из-за того, что MIME-Type не указан ?
Код: java
1.
response.setHeader("Content-Type", "image/png");
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39275009
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

нет, оно валилось там где readAllBytes. я вынес его проверку выше инициализации оутпутстрима. ничего нового, но работает, а Content-Type устанавливалось выше. и в бафередстрим пожалуй оберну, так правильней и сейчас и на будущее.
...
Рейтинг: 0 / 0
Вывод из сервлета два раза подряд
    #39275074
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.net,
мы рассуждаем. Добро пожаловать в форум!
У меня тоже такой же проект. У тебя вероятно нет такого проекта.
А упоротые мы оба). Разве не видно?
Один предлагает, другой поучает.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод из сервлета два раза подряд
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]