LINUX.ORG.RU

Jetty + src/main/webapp = плохая отдача файлов

 ,


0

2

Присутствует на: предпоследней стабильной версии Jetty, и на последней нестабильной (9.2.5.v20141112 и 9.3.0.M1 соответственно).

На Wildfly 8.2.0 Final этой проблемы нет, но нужно именно Jetty.

Проблема вот в чём.

Есть маленькая утилита с веб-интерфейсом.

Положил в папку /webapp/theme дизайн сайта.

Большая часть файлов отдается ОК, но некоторые затыкаются и не отдаются вообще, или через минуту. Например, шрифты, хотя вроде бы и весят всего 40 килобайт.

Со стороны кажется, что плохо отдаются вот такие «бинарные» файлы типа шрифтов и скомпилированного JS.

Чо делать?

Пока что решил перекрытием контекста /myapp/theme обслуживательщиком статики, прямо в конфиге standalone Jetty и в конфиге Jetty Maven Plugin. Но при таком раскладе, пользователю придется делать свои настройки, какие-то абсолютные пути на жестком диске, это днище.

★★★★☆

Последнее исправление: stevejobs (всего исправлений: 3)

java же, ей положено тормозить.

umren ★★★★★
()

Отправьте подвисающий запрос, снимите thread dump и анализируйте.

anonymous
()

кажется понял, в чем проблема. У меня есть адов быдлокод, который самописными фильтрами перефигачивает HTML. Конвертит request в строку, ковыряется регэкспами и отправляет дальше. Оказалось, что там нет проверки на источник, т.е. бинарники он тоже перефигачивает, как будто это HTML.

непонятно вот шта, почему этот быдлокод быстр как молния на Wildfly и тормозит на Jetty.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

хм... может у вайлфлай есть доп фильтры изкоропки которые в случае бинарников игнорят быдлокод.

ii8_ ★★★★
()
Ответ на: комментарий от ii8_

Решено.

Применяю быдлофильтр только к страницам Викета, по белому списку.

Перекрытие контекста сервлетом для статики убирать не стал, помойму фича ОК.

Магия Вилдфлая, позволяющая быстрый string.replace внутри бинарника осталась неразгаданной.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от vertexua

этот фильтр скрещивает Wicket и Spring Security. (Зачем это нужно - совершенно отдельный вопрос, считаем что для фана и из мести Викету).

В частности, он прописывает спринговые CSRF-токены, о которых Wicket ясное дело знать не может. Т.е. я тупо не смог бы посмотреть ни одну страницу, если б этот код не сработал. Это очень чёткий критерий, хорошо видно.

другой WTF, что человек запустил мой код на Шиндовс+Tomcat и сказал, что у него слетела кодировка в браузере. Кодировка вообще всех файлов в проекте, кроме бинарников, UTF-8. Как может слететь кодировка только от того, что я загнал HTML в String, сделал replace и отдал дальше? Какая-то хрень. Anyway, у меня на лялихе ничего не слетет, будем решать проблемы по мере поступления, но всё это очень подозрительно.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от Ja-Ja-Hey-Ho

То есть вот это скомпилированый «бинарный» файл?

function hello(a){alert("Hello, "+a)}hello("New user");

Я понимаю что обозвать можно как угодно. Но умный минификатор с оптимизациями от этого не станет компилятором.

zinfandel ★★
()
Последнее исправление: zinfandel (всего исправлений: 1)
Ответ на: комментарий от zinfandel

Компиля́тор — программа, выполняющая компиляцию.
Компилировать — проводить трансляцию машинной программы с проблемно-ориентированного языка на машинно-ориентированный язык.
(c) Википедия

В данном случае высокоуровневый язык - это CoffeeScript, «машина» - V8, «ассемблер» - javascript.

Ты наверное последние пять лет работал под прикрытием в глубинах Мексики, но на сегодняшний день даже C++ компилируют в javascript: http://kripken.github.io/mloc_emscripten_talk/gindex.html#/ (листать слайды стрелочками на клавиатуре, <- и ->)

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

Как может слететь кодировка только от того, что я загнал HTML в String, сделал replace и отдал дальше?

Кодировка обычно слетает на уровне request/response (а это может случиться даже от вызова геттера). У тебя же она вероятно просто не установлена, вот и вышла трабла: кодировка фалов - системная кодировка - дефолтная кодировка в браузере.

ya-betmen ★★★★★
()
Ответ на: комментарий от stevejobs

Выше уже дали ссылки, но не забывай что в каждом серваке может быть собственная жопорукая имплементация, джетти не юзал, там хз. У ИБМа например можно сбросить кодировку вовремя дернув getCharacterEncoding, у 6 томката тоже можно было словить глюков с кодировкой если пользовать фильтры.

ya-betmen ★★★★★
()
Ответ на: комментарий от iZEN

а теперь найди между ними хоть одно различие.

maloi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.