2012-05-19 6 views
1

У меня мало сомнений по поводу сессий в JSF и/или вообще.Как создается сеанс в приложении JSF?

Прежде всего, создается ли сеанс при загрузке веб-приложения в контейнер AS/servlet? Смысл, после того, как я сделаю правильный клик, запустив на сервере, и приложение запущено и синхронизировано?

Или он создается после загрузки веб-приложения и отображается определенная страница приветствия, а затем клиент делает запрос?

Во-вторых: Я искал вопрос «Невозможно создать сеанс после того, как ответ был зафиксирован» в jsf.

Я пытался воспроизвести проблему, делая это дано в следующем сайте, http://java.net/jira/browse/JAVASERVERFACES-2215

Но я не получил какую-либо ошибку, как указано выше. Я пробовал со всем бобом. Был ли сеанс создан?

Это код.

<h:body> 
     <h:form id="test"> 
     <p:growl id="msg"></p:growl> 
     <h:outputText value="#{myTestBean.exceedBuffer}" /> 

     </h:form> 
    </h:body> 

bean код -.

public String getExceedBuffer() {  
     int size = FacesContext.getCurrentInstance().getExternalContext().getResponseBufferSize(); 
     char[] chars = new char[size]; 
     Arrays.fill(chars, 'x'); 
     return new String(chars); 
    } 

Мое понимание заключается в следующем,

Во-первых, когда приложение загружается в контейнер сервлетов или AS создает сеанс и SESSIONID (JSESSIONID) и помещает его в памяти сервера. Таким образом, начальная страница загружается в любом случае, что означает, что даже если буфер ответа переполнен или нет, но сеанс не будет создан. Теперь, когда клиент делает запрос на этой странице, поскольку сеанс не был создан, возникает ошибка. Но я пробовал даже делать это

<p:commandButton actionListener="#{myTestBean.onSelect}" update=":test"></p:commandButton> 

и в методе onВыбор только что ввел фиктивный код. Даже сейчас страница отображается как обычно.

Ну, это было, когда я был полностью потерян. Может ли кто-нибудь помочь мне в этом? Заранее спасибо.

ответ

3

Прежде всего, создается ли сеанс при загрузке веб-приложения в контейнере AS/servlet? Смысл, после того, как я сделаю правильный клик, запустив на сервере, и приложение запущено и синхронизировано?

Или он создается после того, как веб-приложение загружено и отобразится определенная страница приветствия, а затем клиент делает запрос?

Он создается при запуске сеанса HTTP, а не при запуске webapp (это область приложения). В принципе, когда request.getSession() вызывается в первый раз, а HttpSession еще не создан. Все это обрабатывается Servlet API, который использует JSF под обложками. Таким образом, следующий ответ должен помочь в понимании того, как это работает: How do servlets work? Instantiation, sessions, shared variables and multithreading


Во-вторых, я смотрел в вопрос «Не удается создать сеанс после того, как ответ был совершен» в JSF.

Я пытался воспроизвести проблему, делая это дано в следующем сайте, http://java.net/jira/browse/JAVASERVERFACES-2215

Но я не получил какую-либо ошибку, как указано выше. Я пробовал со всем бобом. Был ли сеанс создан?

Вы получите эту ошибку, когда HttpSession еще не создан в данный момент ответ совершено. То, что вы не получили эту ошибку, может означать только то, что сеанс уже создан заранее. Вам нужно протестировать его на недавно запущенном webapp, и сеанс еще не должен быть создан. Обратите внимание: некоторые серверы по умолчанию хранят сеансы при запуске/перезагрузке. Вам необходимо отключить это или удалить файл cookie JSESSIONID в браузере перед отправкой первого запроса на этой тестовой странице. Перезапуск веб-браузера или другое приложение также должно привести к новому сеансу.

+0

@BalusC .. Я попробовал оба, создал новое веб-приложение, а также запустил старый в новом браузере. Тем не менее. Нет ошибки. Также, создает ли JSF сеанс сам по запросу управляемого сеансом компонента? –

+1

Какую версию JSF вы используете? Вопрос был исправлен с Mojarra 2.1.8. JSF не создает сеанс, его создает servletcontainer. Компонент, обработанный сеансом, действительно неявно требует сеанса, поэтому servletcontainer должен создать один, если он еще не существует. – BalusC

+0

jsf-api-2.1.0-b03.jar и jsf-impl-2.1.0-b03.jar –

Смежные вопросы