Автоуправление версиями статического содержания с JBoss

Согласно Вопросам и ответам здесь, я хотел бы реализовать подобную автосистему управления версиями для веб-приложения, работающего в JBoss 5. Там что-нибудь должно уже там сделать этот вид вещи, или я должен буду записать что-то сам? Быть ясным: Я не использую PHP.

Не зная очень о PHP, я не уверен что аналоги Tomcat/JBoss PHP's .htaccess, и т.д. Если бы я действительно должен записать свое собственное автоуправление версиями, где я запустил бы? Принцип ясен мне - перезапись URL с помощью метки времени файла, но я не знаю много о перезаписи URL с JBoss/Tomcat.


Обновление:

При объединении подходов, рекомендуемых Паскалем и новичком, вот то, с чем я закончил:

1. Пользовательский и теги, таким образом, я не должен был бы видеть теги везде.

<%@ tag body-content="empty" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ attribute name="src" required="true" rtexprvalue="true" %>

2. Следующее справедливо тесно к шагам новичка, но отображению UrlRewriteFilter кому: /* в web.xml:


    UrlRewriteFilter
    /*

3. Вводя переменную CACHE_BUST к каждой новой сессии (более или менее...), приложение развертывается метка времени:

// On application deploy:
long CACHE_BUST = System.currentTimeMillis() / 1000;

// later...
session.setAttribute("cacheBust", CACHE_BUST);

4... так, чтобы я мог использовать эти правила в urlrewrite.xml:


    ^/static/(css|js|images)/(.*)$
    %{context-path}/static/%{session-attribute:cacheBust}/$1/$2



    ^/static/\d{10}/(css|js|images)/(.*)$
    /static/$1/$2


Большое спасибо Паскалю и новичку для их справки.

9
задан Community 23 May 2017 в 12:02
поделиться

2 ответа

Если вы не хотите, чтобы ваше приложение запускалось с использованием Apache HTTPD, вы можете использовать настраиваемый фильтр сервлетов или повторно использовать существующий фильтр перезаписи URL . Этот фильтр основан на Apache mod_rewrite и предлагает аналогичные возможности. Другими словами, это позволило бы реализовать то же решение, что и другой ответ PHP.


Я уже видел фильтр перезаписи URL. Не могли бы вы рассказать, как я это использую? Я действительно не понимаю, как применить фильтр к этой проблеме, поскольку я бы не стал вызывать функцию JSP / JSTL, обернутую вокруг каждого включенного файла JS / CSS, и я не знаю, как получить дата изменения из файла, находящегося в WAR.

Что ж, идея заключалась в том, чтобы точно имитировать «PHP-решение» ответа, на который вы ссылаетесь (назовем этот вариант 1):

  1. Настройте фильтр перезаписи URL-адресов, чтобы переписать любой запрос, чтобы сказать / css / my.123456.css в / css / my.css
  2. Реализуйте сервлет , который получит объект File для данного ресурса внутри WAR и вставит File # lastModified () в возвращенный путь к этот ресурс.
  3. Вызвать сервлет из JSP для CSS.

Другой подход (вариант 2) заключался бы в добавлении уникальной строки запроса к URL-адресу статического содержимого, например время запуска сервера:

  1. Поместите время запуска сервера в область приложения из ServletContextListener (скажем, под ключом «ключ» ).
  2. В вашем JSP

      
     

Pro : больше не нужно перезаписывать URL. Против: Менее оптимально (контент будет запрашиваться при перезапуске), но приемлем.


При поиске в Интернете кода, который мог бы помочь реализовать шаг №2 варианта 1, я обнаружил Spring o.s.w.s.ResourceServlet , который делает нечто подобное, вы можете посмотреть его исходный код. Но, более внимательно читая его javadoc, я понял, что этот сервлет на самом деле именно то, что вы ищете. Сопоставьте это следующим образом:

<servlet>
  <servlet-name>Resource Servlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.ResourceServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>Resource Servlet</servlet-name>
  <url-pattern>/static/*</url-pattern>
</servlet-mapping>

И установите для его свойства applyLastModified значение true . Насколько я понимаю, javadoc должен помочь. Это вариант 3, и это лучший вариант IMO, если добавление зависимости от этого сервлета не является проблемой.

3
ответ дан 4 December 2019 в 22:28
поделиться

В нашем веб-приложении мы делаем следующее:

  1. Процесс сборки получает номер репозитория Subversion и сохраняет его в свойство в веб-приложении.
  2. Процесс сборки также создает структуру каталогов для статических ресурсов в WAR, которая включает этот номер версии: / assets / 1234 / styles / ...
  3. Фильтр / перехватчик помещает путь к ресурсам (включая номер версии) во все запросы как атрибут
  4. Шаблоны Jsp используют этот атрибут пути к ресурсам для создания URL-адресов для ресурсов
1
ответ дан 4 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: