Я буду расширять свой комментарий здесь .
В простейшем случае ServletContext.setAttribute/getAttribute
было бы хорошо. Но некоторые люди справедливо подняли вопросы о безопасности потоков.
Для этого лучшим подходом было бы сохранить общий POJO в ServletContext
во время инициализации веб-приложения и получить его там, где вам нужно, с помощью ServletContext.getAttribute
.
Для этого вам необходимо реализовать интерфейс ServletContextListener и объявить его в файле web.xml.
<listener>
<listener-class>your.package.ServletContextListenerImpl</listener-class>
</listener>
Этот слушатель вызывается один раз, когда ваше веб-приложение загружается контейнером сервлета, и когда оно собирается быть выгруженным контейнером сервлета. В обоих случаях он передает ServletContextEvent
с дескриптором на ServletContext
. Именно в этот момент вы хотите установить / удалить атрибут, который указывает на ваш общий объект.
Из-за этого вы можете быть уверены, что ServletContext.getAttribute вернет действительный объект при вызове из Servlet.service
или одного из do...
методов.
Что касается имени атрибута, я бы пошел с вашим именем класса общего класса. Я бы также добавил статический метод доступа к вашему общему классу, чтобы получить его из ServletContext
, например:
public class Shared
{
...
public static Shared fromServletContext ( final ServletContext context )
{
return (Shared) context.getAttribute( Shared.class.getName( ) );
}
}