Каждое веб-приложение должно иметь некоторый способ хранения определенных пользовательских данных, таких как объект пользователя, пользовательские предпочтения и т. Д. Например, в приложении корзины покупок выбранные пользователем товары / товары должны сохраняться во временном контейнере (корзине) до тех пор, пока пользователь не отдает предпочтение купить продукты. Мы можем сохранить элементы в базе данных, но это будет слишком дорого, поскольку все пользователи не собираются покупать выбранные элементы. Итак, нам нужно временное устройство для хранения / сохранения предметов. Apache Tapestry Предоставляет два способа сохранения данных, и они —
- Данные персистентной страницы
- Хранение сессий
У обоих есть свои преимущества и недостатки. Мы проверим это в следующих разделах.
Данные персистентной страницы
Данные персистентности страницы — это простая концепция для сохранения данных на одной странице между запросами, которая также называется персистентностью на уровне страницы . Это можно сделать с помощью аннотации @Persist .
@Persist public int age;
Как только поле аннотируется @Persist, значение поля будет сохраняться в запросе, и если значение будет изменено во время запроса, оно будет отражено при следующем обращении к нему. Apache Tapestry предлагает пять типов стратегий для реализации концепции @Persist. Они заключаются в следующем —
-
Стратегия сеанса — данные сохраняются с использованием сеанса, и это стратегия по умолчанию.
-
Стратегия Flash — данные также сохраняются с использованием Session, но они очень недолговечны. Данные будут доступны только в одном последующем запросе.
Стратегия сеанса — данные сохраняются с использованием сеанса, и это стратегия по умолчанию.
Стратегия Flash — данные также сохраняются с использованием Session, но они очень недолговечны. Данные будут доступны только в одном последующем запросе.
@Persist(PersistenceConstants.FLASH) private int age;
-
Стратегия клиента — данные сохраняются на стороне клиента, такие как строка запроса URL, скрытое поле в форме и т. Д.
Стратегия клиента — данные сохраняются на стороне клиента, такие как строка запроса URL, скрытое поле в форме и т. Д.
@Persist(PersistenceConstants.FLASH) private int age;
-
Стратегия Hibernate Entity — данные сохраняются с использованием модуля Hibernate в качестве Entity. Сущность будет сохранена в Hibernate, а ее ссылка (имя класса Java и его первичный ключ) будет сохранена как токен в HttpSession . Объект будет восстановлен с использованием токена, доступного в HttpSession.
Стратегия Hibernate Entity — данные сохраняются с использованием модуля Hibernate в качестве Entity. Сущность будет сохранена в Hibernate, а ее ссылка (имя класса Java и его первичный ключ) будет сохранена как токен в HttpSession . Объект будет восстановлен с использованием токена, доступного в HttpSession.
@Persist(HibernatePersistenceConstants.ENTITY) private Category category;
-
Стратегия сущности JPA — данные сохраняются с использованием модуля JPA. Он сможет хранить только Entity.
Стратегия сущности JPA — данные сохраняются с использованием модуля JPA. Он сможет хранить только Entity.
@Persist(JpaPersistenceConstants.ENTITY) private User user;
Хранение сессий
Хранилище сеансов — это продвинутая концепция, используемая для хранения данных, которые должны быть доступны на разных страницах, таких как данные в мастере многостраничных данных, информация о пользователе и т. Д. Хранилище сеансов предоставляет два варианта: один для хранения сложного объекта, а другой для хранения простых значений
-
Session Store Object — Используется для хранения сложного объекта.
-
Атрибуты сеанса — используются для хранения простых значений.
Session Store Object — Используется для хранения сложного объекта.
Атрибуты сеанса — используются для хранения простых значений.
Объект хранилища сеансов (SSO)
Единый вход может быть создан с помощью аннотации @SessionStore . SSO будет хранить объект, используя тип объекта. Например, объект Cart будет сохранен с использованием имени класса Cart в качестве токена. Таким образом, любой сложный объект может быть сохранен в приложении один раз (по одному на пользователя).
public class MySSOPage { @SessionState private ShoppingCart cart; }
SSO — это специализированное хранилище, и его следует использовать для хранения только сложных / специальных объектов. Простые типы данных также могут храниться с использованием единого входа, но хранение простых типов данных, таких как String, позволяет хранить в приложении только одно значение «String». Использование одного значения «String» в приложении просто невозможно. Вы можете использовать простые типы данных, так как Apache Tapestry предоставляет атрибуты сеанса.
Атрибуты сеанса
Атрибуты сеанса позволяют хранить данные по имени, а не по типу.
public class MyPage { @SessionAttribute private String loggedInUsername; }
По умолчанию атрибуты сеанса используют имя поля для ссылки на данные в сеансе. Мы можем изменить имя ссылки по параметру аннотации, как показано ниже —
public class MyPage { @SessionAttribute("loggedInUserName") private String userName; }
Одна из основных проблем использования имени в качестве ссылки на сессию заключается в том, что мы можем случайно использовать одно и то же имя в нескольких классах / страницах. В этом случае сохраненные данные могут быть неожиданно изменены. Чтобы решить эту проблему, будет лучше использовать имя вместе с именем класса / страницы и именем пакета, например com.myapp.pages.register.email , где com.myapp.pages — это имя пакета, register — это страница / класс. имя и, наконец, адрес электронной почты является переменной (для хранения) имя.