Если я хочу отслеживать состояние разговора с каждым клиентом, использующим мое веб-приложение, какой вариант лучше использовать - сессионный компонент или сеанс HTTP?
Использование HTTP-сессии:
//request is a variable of the class javax.servlet.http.HttpServletRequest
//UserState is a POJO
HttpSession session = request.getSession(true);
UserState state = (UserState)(session.getAttribute("UserState"));
if (state == null) { //create default value .. }
String uid = state.getUID();
//now do things with the user id
Использование сеанса EJB:
В реализации ServletContextListener зарегистрирован как слушатель веб-приложения в WEB-INF/web.xml
:
//UserState NOT a POJO this this time, it is
//the interface of the UserStateBean Stateful Session EJB
@EJB
private UserState userStateBean;
public void contextInitialized(ServletContextEvent sce) {
ServletContext servletContext = sce.getServletContext();
servletContext.setAttribute("UserState", userStateBean);
...
В JSP:
public void jspInit() {
UserState state = (UserState)(getServletContext().getAttribute("UserState"));
...
}
В другом месте в теле того же JSP:
String uid = state.getUID();
//now do things with the user id
Мне кажется, что они почти одинаковы, с основным отличием в том, что экземпляр UserState переносится в HttpRequest.HttpSession
в первом и в ServletContext
в случае последнего.
Какой из двух методов более надежен и почему?