Java сохраняет страницу JSP в кеше - PullRequest
0 голосов
/ 02 июля 2018

Я хочу использовать кеш для загрузки страницы JSP. Я создал динамический веб-проект с использованием Java JSP-сервлета.

В этом проекте я получаю данные (в JSON) из вызова API Rest и визуализирую эти данные на странице JSP внутри таблицы, динамически.

Я также получаю имя ключа 'lastUpdate' со временем данных в данных API.

В первый раз, когда мне нужно визуализировать данные внутри таблицы, затем во второй раз после вызова API Rest, я должен проверить, совпадает ли мое время lastUpdate (которое доступно в кэше) с последним из lastUpdate Вызов API оставайся, тогда я должен показать ту же страницу, используя кеш.

Я не уверен, возможно это или нет, я новичок в управлении кешем.

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

Ответы [ 2 ]

0 голосов
/ 12 июля 2018

Вот что я понимаю из вашего вопроса:

  1. Вы получаете HttpRequest на свой сервер
  2. Вы получаете данные из REST API
  3. Ответ с данными содержит время последнего обновления
  4. Вы хотите отобразить страницу и записать отметку времени данных
  5. В следующий раз, если вы получите тот же запрос, вы проверяете REST API, и updatedTime остается прежним, вы хотите вернуть ту же старую визуализированную строку / байт []

Предположение: Страница является общей для всех клиентов, и нет никаких поисковых запросов и т. Д. Таким образом, единственный вопрос заключается в том, следует ли снова отображать страницу или нет. то есть мы не собираемся хранить несколько JSP в кеше. Только «вернуть тот же JSP» или «вернуть его снова»

Вот мои мысли:

  1. Вы уверены, что вам нужно кэшировать JSP? Подумайте о времени обработки запроса ... 90% времени будет использовано при выполнении вызова REST Api, и только 10% (или меньше) будет использовано для визуализации JSP. Таким образом, вы можете получить очень мало от его кэширования.
  2. Размер отображаемой страницы JSP, вероятно, будет большим (от 5 до 50 КБ, может быть?). Таким образом, сохранение его в кеше может быть большой проблемой. Регенерация лучше. (Процессор дешевый, кратковременная память дешевая, долговременная память дорогая, так как это может привести к паузе GC)
  3. Это должен быть JSP? Есть несколько вариантов, таких как Thymeleaf и другие шаблоны. Они могут помочь с отображением строки html. (Поскольку JSP более тесно связан с ServletOutputStream и может быть немного сложным для кэширования. Механизмы шаблонов, вероятно, облегчат процесс кэширования, поскольку они не очень тесно связаны)

Если вам все еще интересно кэшировать JSP, это может сработать:

  1. Если данные изменились / в первый раз: создайте оболочку из HttpServletResponse, которая даст поток замены вместо реального потока вывода сервлета. (Он также должен сохранять копию и пересылать в реальный поток вывода сервлета. Используйте оболочку ответа для вызова переадресации:

    .

    request.getRequestDispatcher (xyz.jsp ") вперед (REQ, resWrapper);

  2. Если данные не изменились, создайте резервную копию с шага 1 и запишите в выходной файл:

    PrintWriter out = response.getWriter (); out.write (backupStr);

0 голосов
/ 06 июля 2018

Вы можете использовать даты в строке заголовка, например:

'If-Modified-Since': 'Fri, 06 Jun 2018 01:16:45 GMT'

Это говорит браузеру использовать кеш браузера для данных, если он не изменялся с того времени.

Сервер использует поле для связи при создании данных:

'Last-Modified': 'Fri, 06 Jun 2018 10:15:25 GMT'

Когда вы спрашиваете If-Modified-Since, вы получаете либо 304 (Не изменено), либо 200 OK, с новым значением Last-Modified.

...