![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 3 Всего: 127 |
Недавно стал изучать фильтры.
Насколько я понял, они должны полностью принять весь запрос, что бы его обработать и передать дальше тоже полностью. Т.е. они не потоковые, а именно последовательные. Грубо говоря, они отвечают мировоззрению модели DOM в XML`е - весь ответ сервера загрузили, распарсили, изменили, после этого отправили дальше. А можно ли реализовать что-то типа SAX-модели, а лучше просто потоковой? Т.е. сервлет возвращает, ведь, HTTP-ответ потоком, а не целым куском сразу - и мы бы читали этот поток и передавали его в фильтре дальше по мере поступления, в цикле, например так:
Как-то так можно или нет?.. А то по классической модели получается, что пока фильтр не отработает, клиент вообще ничего не увидит - а передача тоже ведь время ест... Это сообщение отредактировал(а) Се ля ви - 29.3.2005, 11:28 -------------------- |
|||
|
||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 3 Всего: 127 |
Нет, я про J2EE фильтры. Они по сути как сервлеты, только для пре- и пост-обработки основного запроса используются...
-------------------- |
|||
|
||||
| Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 3 Всего: 127 |
Так что - никто не знает?..
-------------------- |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Чего то я не понял твоей мысли. Передаче чего ест время? Нельзя передать кусок респонса а потом еще один. Он идет целиком.
-------------------- |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Если более подробно - если посмотреть например на хттп реквест, то серверу в любом случае оно нужно целиком. Скажем, если оно содержит ПОСТ реквест, то нужно прочесть все поля, а иначе не будет смысла вообще что-то делать Точно так же фильтр должен послать весь реквест, иначе клиент получит например кусок хедера и ничего вообще не покажет. Или я не так понял? -------------------- |
|||
|
||||
| Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 3 Всего: 127 |
Domestic Cat
Ну смотри, есть же, например, правило, что заголовки ответа нужно устанавливать в сервлете ДО генерации контента (по крайней мере было в ранних спецификациях), если отключено кэширование вывода. Я это интерпретировал так, что HTTP-ответ начинает приходить клиенту уже в процессе выполнения сервлета, а не после окончания работы метода doPost или doGet - разве не так? Иначе теряется смысл везде писать response.printLn("ляляля") - можно было бы всё копить в строковый буфер и потом выдавать сразу. Тогда, получается, что установка фильтра блокирует потоковый вывод, заставляя выводить пользователю данные все сразу? Вот как этого избежать - вот в чём вопрос. Грубо говоря, как заставить фильтр работать в режиме модели SAX? Типа сервлету идёт запрос, фильтр его пропускает, сервлет выдаёт ответ в виде XML-потока тегов, а мы в фильтре ловим всё это по событиям SAX`а и не дожидаясь конца документа сразу посылаем клиенту - так можно сделать или нет?.. -------------------- |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Думаю, что нет, да и смысла особогo не вижу. Фильтр нужен для манипуляций с респонсом/реквестом каk целым, например, чтоб его заархивировать и съекономить тем самым трафик - этo будеt гораздо быстрее любых других вариантов.
-------------------- |
|||
|
||||
| Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 3 Всего: 127 |
Domestic Cat, хм, ну ведь SAX не зря придумали! Ну например, видео или звук кому-то приспичело гнать через Java и нам надо его малость обрабатывать по пути - как тогда?.. Если впринципе документа нет, а есть лишь поток, к которому подключаются и отключаются? Или для этого другой API, что-то вместо сервлетов используется? -------------------- |
|||
|
||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Кажется раскопал как это сделать, но точно не уверен, так что гогами не пинать, для этого нужно использовать классы: Filter, HttpServletRequestWrapper/HttpServletRepsponseWrapper и модифицировать ServletOutputStream, перегрузкой его методов мы как раз получим фильтрацию на уровне потока:
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Разве что для стрима нужно... А так смысла не вижу. Или докажите
-------------------- |
|||
|
||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Domestic Cat - ну, допустим изображения обрабатывать на выходе, к примеру, добавлять на них надпись www.mysite.ru
Это сообщение отредактировал(а) 3,14 - 4.4.2005, 11:13 -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
![]()
|
| Правила форума "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. |