2016-02-02 1 views
0

Я пытаюсь протестировать функцию push на сервере на статичном веб-сайте с автономным Jetty.Как сделать push на сервере с автономным Jetty

Мой сайт состоит из index.html  + 1 CSS + куча изображений. Структура каталога:

/Album 
   Â| 
   Â|-----index.html 
   Â|-----style.css 
   Â|------/images 
        Â| 
        Â|-----image 1.png 
        Â|---a set of 100 images 
        Â|---image100.png 

Как я только хотел, чтобы быстро проверить на сервер нажимной функцию я не закодировать этот сайт в качестве веб-проекта Java и, следовательно, не имеют каких-либо файл web.xml.

Однако в документации Jetty предлагается добавить PushCacheFilter в web.xml. Поэтому я создал файл /Album/WEB-INF/web.xml в моем проекте и добавил PushCacheFilter в качестве указанной документации.

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

Я проверил несколько примеров в Интернете, но большинство из них имеют встроенный Jetty. Кто-нибудь, пожалуйста, помогите мне разобраться, как протестировать функцию push-сервера на моем статичном веб-сайте с автономным Jetty?

Кроме того, я хотел спросить, может ли пример HTTP/2 клиента в репозитории GitHub Jetty использоваться непосредственно как таковой? Извините, я сам не протестировал клиента. Я только что видел это в хранилище, и мне было любопытно. Я буду очень благодарен, если кто-то может указать мне в качестве примера использовать casewith HTTP и HTTP/2 клиента Jetty.

ответ

1

Слишком много вопросов, и это не совсем понятно, что вы хотите сделать :)

Jetty выставляет Jetty конкретного API на сервере для выполнения толчков (в конце концов, эти интерфейсы будут частью Servlet 4.0).

Вы можете получить доступ к этому API с помощью org.eclipse.jetty.server.Request.getPushBuilder() см http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/server/PushBuilder.html

PushBuilder В API, затем позволит вам настроить ресурс толкать и толкать его.

PushCacheFilter осуществляет кеш коррелированных ресурсов. Когда запрашивается первичный ресурс, который имеет коррелированные вторичные ресурсы, PushCacheFilter толкает эти коррелированные ресурсы с использованием API-интерфейсов PushBuilder.

Если PushCacheFilter не подходит под ваши нужды, вы можете написать собственный фильтр своей логикой и выполнить push с помощью API-интерфейсов PushBuilder.

На стороне клиента, если вы хотите использовать Java API для выполнения запросов и получения нажатий, вы должны использовать HTTP2Client, см. http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/http2/client/HTTP2Client.html.

Примеры выполнения запроса и получения токов here.

Если вам нужен полноценный пример, похожий на ваш (index.html + bunch of images), вы можете посмотреть на HTTP/2 demo.

ОБНОВЛЕНИЕ: Простой пример использования PushBuilder.

public class MyPushFilter implements Filter { 
@Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest httpRequest = (HttpServletRequest)request; 
     String uri = httpRequest.getRequestURI(); 
     switch (uri) { 
      case "/index.html": 
       // Jetty specific APIs for now. 
       PushBuilder pushBuilder = Request.getBaseRequest(request).getPushBuilder(); 
       pushBuilder.path("/styles.css").push(); 
       pushBuilder.path("/background.png").push(); 
       break; 
      default: 
       break; 
     } 
     chain.doFilter(req, resp); 
    } 
} 

Приведенный выше пример очень прост. Он не обрабатывает HTTP-версию, условные заголовки и т. Д. Пожалуйста, посмотрите на реализацию PushCacheFilterhere для лучшей реализации.

+0

Благодарим вас за ответ. Я согласен с тем, что вопросов слишком много. В то время я только начал с Jetty. Я тоже обсуждал этот вопрос в списке рассылки. Теперь я хочу увидеть небольшой пример использования PushBuilder для статического веб-сайта с автономным Jetty. Не могли бы вы дать мне несколько быстрых указаний. – user1197736

+0

Jetty обслуживает статические файлы через свой 'DefaultServlet', поэтому для выполнения нажатий вам просто нужно добавить' PushCacheFilter'. Посмотрите на демонстрацию, на которую я указал. Я также отредактировал ответ для быстрого примера «PushBuilder». Обратите внимание, что API может измениться, чтобы отражать разработки Servlet 4. – sbordet

+0

@sborder Thank You. Он работал для моего случая использования. – user1197736

Смежные вопросы