Я предпринял попытку реализовать поддержку функции, аналогичной mod_xsendfile на Torquebox (www.torquebox.org). Torquebox, по сути, представляет собой набор кода поверх JBoss AS 7, что делает мои усилия своего рода эквивалентными работе sendfile на JBoss AS 7.
Основная проблема здесь, вероятно, заключается в моем замешательстве по поводу JBoss, но, потратив слишком много времени на исчерпание всех моих ресурсов, связанных с поиском, я должен поверить, что есть кто-то, кто на самом деле знает , как эта штука работает в AS 7.
Насколько я понимаю, sendfile поддерживается в JBoss за счет использования собственных коннекторов JBoss Web (http://www.jboss.org/jbossweb/downloads/jboss-native-2-0-10),, а именно HTTP-коннектора APR.
После того, как вы потратили часы, не устанавливая их на AS 7, что, кажется, работает как прелесть для других (https://community.jboss.org/message/614790), grep'ing, мой локальный каталог JBoss говорит мне, что эти родные соединители, по-видимому, связаны с AS 7. В моем случае необходимая dll находится в
% JBOSS_HOME% \ модули \ орг \ JBoss \ а \ Web \ главный \ Lib \ выигрыш-x86_64
Так что эпический провал, попытка установить то, что уже есть.
Проверка моего файла конфигурации standalone.xml также показала, что этот собственный коннектор используется
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
<virtual-server name="default-host" enable-welcome-root="false">
<alias name="localhost"/>
<alias name="example.com"/>
</virtual-server>
</subsystem>
Переключение всех уровней ведения журнала на отладку и проверка журнала показывает сообщение журнала
standalone / log / server.log.2012-02-10: 324: 23: 12: 17,964 INFO [org.apache.coyote.http11.Http11AprProtocol] (поток службы MSC 1-5) Запуск Coyote HTTP / 1.1 включен HTTP-127.0.0.1-127.0.0.1-8080
Где Http11AprProtocol указывает, что используется HTTP-коннектор APR. Тем не менее, во многих публикациях в Интернете упоминается, что должна быть показана следующая строка:
org.apache.catalina.core.AprLifecycleListener init INFO: возможности APR: IPv6 [true], sendfile [true], принимать фильтры [false], случайные [true].
Независимо от уровня ведения журнала, строка AprLifecycleListener никогда не отображается.
Когда я проверяю это, кажется, что теперь используется HTTP-коннектор APR.
Согласно документации, я могу заставить работать следующий сервлет
public class Sendfile extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
if(Boolean.TRUE == request.getAttribute("org.apache.tomcat.sendfile.support")){
// Send all the files!!
}
else{
throw new ServletException("BOOM!");
}
}
}
Но нет. Атрибут org.apache.tomcat.sendfile.support имеет значение null, и если попытаться установить заголовки http для отправки файла (игнорируя атрибут support) и задать остальные обязательные атрибуты sendfile, мой браузер считает, что он получает файл, но данные не передаются ... и соединение не работает.
Чтобы завершить вопрос, кажется, что требуемый собственный коннектор APR используется, sendfile должен быть включен по умолчанию, но сервер не имеет ни малейшего представления, что я пытаюсь заставить его сделать.
Как продолжить?