![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| vzf |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 203 Регистрация: 10.9.2005 Репутация: 2 Всего: 5 |
У меня есть сервлет. Он получает из атрибута сессии массив байт соответствующий файлу. Вопрос как лучше передать этот файл в респонс? Что лучше использовать OutputStream
или лучше открывать файл в сервлете и использовать Writer ?
--------------------
Java - Write Once, Test EveryWhere! |
||||
|
|||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Если побайтно, то надо открывать не Writer а OutputStream - это раз.
А также хорошо бы предварительно устанавливать MIME-type response.setContentType("application/....."); // чего-то реальное - Тогда броузер попытается предложить записать файл на диск или открыть с помощью какого-либо приложения. |
|||
|
||||
| necromancer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 317 Регистрация: 26.7.2006 Где: Москва Репутация: 6 Всего: 7 |
между Writer и OutputStream по спецификации одна разница - тип передаваемых данных.
В первом случае это chars во втором это bytes. Но проблема будет скорее даже не в этом, если предварителньо не сделать кое какие операции, то поток будет выведен в виде HTML страницы с неким набором непонятных символов. Теперь следующее: Если ты в поток пишешь просто HTML код, то тебе в принципе подойдут оба метода. Если же ты пишешь binary данные то тебе к OutputStream. А если ты ко всему прочему хочешь что бы появился диалог сохранения то:
Вместо octet-stream можно использовать соответсвующий тип документа, для ворда - msword PS Эх штурман опередил =) Но у меня есть ссылочка :Р на дисскусия на сан форуме Sun Forum Это сообщение отредактировал(а) necromancer - 19.7.2007, 17:46 -------------------- С уважением, Виталий Смык ---------------------------------------------------------------------------------------------- SCJP, SCWCD, OCA http://dev.maryno.net/video/ |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Да ладно - у тебя зато более подробно. Так что зачот |
|||
|
||||
| vzf |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 203 Регистрация: 10.9.2005 Репутация: 2 Всего: 5 |
Content-type я устанавливаю тот который мне нужен c этим проблем нет. Хотелось бы услышать мнене какой подход лучше. Передавать массив байт сервлету, чтобы тот положил его в респонс при помощи OutPutStream или использовать Writer. Передававть лучше не побайтно.
Еще попутный вопрос что лучше использовать для "попадания" на сервлет в JSF (точнее в Facelets) : outputLink commandLink commandButton Просто иногда я получаю ошибку response already in use при редиректе на сревлет. Думаю может проблема в том как я файл записываю в респонс. Добавлено через 5 минут и 17 секунд Пока писал свое сообщение пропустил пару сообщений. итого для экспорта бинарных данных мне лучше использовать OutputStraem , я правильно понял ? Сейчас у меня сервлет экспортирует и экселевские файлы и текстовые файлы лога, используя OutPutStream. --------------------
Java - Write Once, Test EveryWhere! |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Правильно понял. Правда Excel ныне неплохо понимает и обычный HTML, но для надежности
|
|||
|
||||
| necromancer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 317 Регистрация: 26.7.2006 Где: Москва Репутация: 6 Всего: 7 |
outputLink представляет собой что то вроде <a href="">text</a> остальные компоненты (commandLink, commandButton) делаю form.submit() - т.е. "попадают" в JSF -------------------- С уважением, Виталий Смык ---------------------------------------------------------------------------------------------- SCJP, SCWCD, OCA http://dev.maryno.net/video/ |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |