Я пытаюсь настроить сервлет так, чтобы пользователи мобильных телефонов / планшетов Android (используя браузер по умолчанию) могли заполнить форму и опубликовать несколько параметров в сервлете, а затем сервлет применяет некоторую логику для выбора предварительносуществующий файл epub для потоковой передачи в ответ.Кажется достаточно простым, но он дает мне все виды подгонок.
Настройка: пользователь Android заходит на мой сайт и отправляет форму, сервлет в Weblogic 10.3 выбирает мой один тестовый файл epub для отправки обратно в ответ,устанавливает Content-Type application/epub+zip
, устанавливает Content-Disposition attachment; filename=TestPartsManual.epub
, передает байты обратно на устройство.
Он отлично работает в Chrome, где я занимаюсь первичной разработкой из-за теоретического сходства WebKit и его крутых инструментов для разработчиков.
Но когда я пробую что-то на своем телефоне Android ( Tmobile Vibrant Galaxy S ), используя браузер по умолчанию ( User-Agent: Mozilla / 5.0 (Linux; U; Android 2.1-update1; ru-ru; SGH-T959 Build / ECLAIR) AppleWebKit / 530.17 (KHTML, как Gecko) Версия / 4.0 Mobile Safari / 530.17 ) с установленным (и работающим) Aldiko, всегда отказывает, в ответе нет содержимогоWeblogic сообщает об ошибке записи в сокет.Поэтому я включил Wireshark и увидел, что происходит несколько странных вещей:
- Как только форма помещена в '/ demoapp / partsmanual', трубка немедленно закрывает соединение.Weblogic сообщает об ошибке записи в сокет.
- Экран браузера переходит к списку загрузки и сообщает, что пытается загрузить файл "partsmanual.bin"
- . Телефон отправляет новый запрос в GET./ demoapp / partsmanual ', но без каких-либо параметров формы сервлет не знает, какой файл отправить обратно, и ничего не отправляется обратно.
Итак, любая идея, почему это внезапноне любит форму POST и в одностороннем порядке решает, что GET без параметров для одного и того же URI будет достаточно ???
Поэтому я упрощаю тестирование и просто предоставляю ссылку на TestPartsManual.epub и настраиваюmime-mapping в web.xml дает расширению epub
тип mime application/epub+zip
.Я нажимаю на ссылку, проверяю через Wireshark, что Content-Type отправляется, и все выглядит так: выглядит ok:
- Экран браузера переходит к списку загрузок, он говоритон загружает TestPartsManual.epub.Это хорошо.
- Загрузка завершена, говорится, что она загрузила 216 КБ, Wireshark согласен, и, должно быть, ей понравился Content-Type, потому что значок Aldiko находится слева.Это тоже хорошо.
- Но затем, когда вы нажимаете на нее, появляется сообщение «Ваша книга будет загружена».А?Моя книга уже загружена, верно?
- Состояние загрузки в строке состояния немедленно сообщает, что загрузка не удалась.Он никогда не отправлял другой GET на сервер.
Итак, есть идеи, почему он игнорирует то, что уже было загружено, а затем сообщает об ошибке загрузки без повторной попытки ??? Сам файл epub, кстати, был проверен, скопирован на мой sdкарта, импортированная в Aldiko, и она читает его очень хорошо, поэтому я не подозреваю сам файл.
** Обновление ** Я считаю, что проблема, которую я вижу, просто нажав на ссылку epubможет быть записан на списки любых привередливых ридеров Android epub, которые вы установили.Хотя Google Books 1.0.16, например, показывает epubs, он не хочет иметь ничего общего с тем, что вы скачиваете, кроме как через их сервис.Aldiko 1.2.14 регистрирует свое намерение обращаться с типом epub mime, но затем разрушает все, что запускается из загрузок браузера.FBReaderJ, кажется, зарегистрировал свое намерение обрабатывать ссылки, оканчивающиеся на .epub, и он обрабатывает загрузку и показывает их (ура FBReaderJ!), Но я пока не могу сказать, будет ли он обрабатывать форму POST исключительно mime-typeмое первоначальное требование), так как я все больше убеждаюсь, что мой первый вопрос выше - проблема с браузером.Я смотрю на вас, Content-Disposition, даже с
цитируемыми именами файлов ...
Наконец, (я признаю, это просто касательная), я включаю отладку в Eclipse, подключенной к моей Weblogic VM, чтобы перехватить сообщение формы.Может быть, я вижу что-то проходящее через это.Примерно через 5 секунд браузер мобильного телефона теряет терпение и повторно отправляет форму! В сервлет поступает другой запрос, и он перехватывается другим потоком в сети.Какого черта такое поведение ???Радует, что не пишу приложение для торговли акциями ....