Файлы кэша браузера не обновляются после нового развертывания на сервере jboss для веб-приложения - PullRequest
3 голосов
/ 23 апреля 2019

Я использую jboss Server 7.1.1 для развертывания веб-приложения java. Для файлов js, css, font кеш браузера не обновляется новыми изменениями. Каждый раз, когда мы настаиваем на том, чтобы клиенты очищали кеш в своих браузерах, чтобы новые изменения вступили в силу.

есть ли какая-нибудь конфигурация, которую я могу настроить, чтобы при развертывании нового кода я мог направлять все запросы на получение обновленного файла?

Поискав по этой теме, я обнаружил, что мы можем написать собственные методы для установки значения электронного тега. Есть ли какая-либо конфигурация, которая может помочь мне сделать это?

большую часть времени мы выполняем горячее развертывание (загрузите файл war в консоль управления jboss без времени простоя). поэтому я сомневаюсь, будет ли обновляться пользовательский электронный тег во время горячего развертывания, поскольку мы настраиваем его при запуске сервера.

или есть способ справиться с этим в файле web.xml веб-приложения?

Мне нужно решение, которое может использовать кэш браузера до следующего развертывания файлов js, css и шрифтов. я не то, чтобы установить «истекает» заголовок. потому что у нас нет фиксированных циклов развертывания.

Дайте мне знать, если вам нужно больше информации, чтобы прийти к решению.

Ответы [ 3 ]

1 голос
/ 29 апреля 2019

Вы хотите, чтобы браузер кэшировал редко изменяемые файлы.Но иногда они делают изменения, и тогда вы хотите, чтобы очистить кеш браузера.Что-то вроде:

<script type="text/javascript">
localStorage.clear();
</script>

Однако надежным решением является использование версий на стороне сервера:

<link type="text/css" rel="stylesheet" href="/css/mystyles-1.01.css">
1 голос
/ 30 апреля 2019

Поскольку вы используете jboss для развертывания своего приложения, я думаю, что ваши страницы не статичны.

Простое решение, если вы не хотите связываться с Cache-Control, это добавление динамического«Перебор кэша» рядом с каждым URL ресурса.Таким образом, ваши URL ресурсов (например, внутри .jsp) будут выглядеть примерно так:

<link rel="stylesheet" href="styles.css?_=${cacheBust}">
<script type="text/javascript" src="script.js?_=${cacheBust}">

Теперь вам нужно место для генерации нового значения cacheBust при каждом развертывании / повторном развертывании.Это может быть:

и HttpServlet, загруженные при запуске:

@WebServlet(loadOnStartup = 1) 
public class InitServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        super.init();
        getServletContext().setAttribute("cacheBust", UUID.randomUUID().toString());
    }

}

или ServletContextListener

@WebListener
public class InitListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        sce.getServletContext().setAttribute("cacheBust", UUID.randomUUID().toString());
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }

}
0 голосов
/ 29 апреля 2019

Согласно этой записи вы можете отключить кэширование, изменив заголовок ответа.Вы можете сделать это, используя response.setHeader("Cache-Control", "no-cache, no-store");

[EDIT]

, вы также можете добавить строку запроса к ссылке (см. этот пост ). Например, вы можете сделать . / Design.css? V = 1 и в первый раз вы можете использовать . / Design.css? V = 1 в следующий раз.Вы можете динамически менять номера

...