Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод из сервлета два раза подряд / 19 сообщений из 19, страница 1 из 1
14.07.2016, 21:47
    #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
14.07.2016, 23:01
    #39274190
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод из сервлета два раза подряд
rema174,
нельзя.
src у картинок в виде статики. Картинки загружаются в потоке в момент загрузки html.
Делают по другому.
- у картинки делают свойство Невидимый в сервлете
- на событие onLoad Page проверяют в JS какое нибудь условие и либо меняют атрибут src, либо оставляют и включают видимость.
Так можно менять картинки хоть на MouseMove.
...
Рейтинг: 0 / 0
14.07.2016, 23:02
    #39274191
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод из сервлета два раза подряд
Невидимый hidden не в сервлете, а в JSP\HTML при вёрстке.
...
Рейтинг: 0 / 0
14.07.2016, 23:19
    #39274195
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод из сервлета два раза подряд
Petro123, не охота с JS связываться...
...
Рейтинг: 0 / 0
14.07.2016, 23:23
    #39274196
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод из сервлета два раза подряд
rema174Petro123, не охота с JS связываться...
это понятно.
Но не реально.
Страничка отправляется клиенту 1 раз и целиком как вагоны в составе поезда.
...
Рейтинг: 0 / 0
15.07.2016, 00:52
    #39274215
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод из сервлета два раза подряд
Жееесть, а в чем проблема то? Ну проверьте есть ли байты из первого источника а потом уже пишите. Все равно через память целиком файлы гоняете.
...
Рейтинг: 0 / 0
15.07.2016, 02:43
    #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
15.07.2016, 10:26
    #39274350
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод из сервлета два раза подряд
uid uniqueno56892Все равно через память целиком файлы гоняете.
в примере загрузка картинки в память в массив байт это не очень картуазно если только это не пример показать по быстрому.


а что плохого, в таком способе. могу использовать разные способы, но там размеры картинок маленькие, и думаю это никак не отразится на производительности.
...
Рейтинг: 0 / 0
15.07.2016, 10:48
    #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
15.07.2016, 12:53
    #39274559
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод из сервлета два раза подряд
rema174,

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

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


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

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


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