Новый сеанс создается между последовательным запросом сервлета от апплета и управляемого компонента? - PullRequest
0 голосов
/ 02 июня 2010

Я хочу передать параметры между апплетом и компонентами jsf Поэтому, когда значение входного текстового поля изменилось, его обязательный вспомогательный компонент устанавливает соединение с сервлетом. Сервлет создает атрибут и сохраняет его в HttpSession с помощью (request.getSession (true)). SetAttribute (name, value);

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

Однако каждый раз возвращаемый attirbute равен нулю, поскольку вместо этого создается новый сеанс.

Мой вопрос таков: сеанс должен быть постоянным? (Я проверил allowcookies, время ожидания сеанса для weblogic)

Если да, что может пойти не так с моим приложением?

Большое спасибо за вашу помощь.

С уважением К.

Ответы [ 3 ]

3 голосов
/ 02 июня 2010

Сессии поддерживаются куки. В среде JSP / Servlet имя файла cookie - jsessionid. Чтобы получить доступ к тому же сеансу, апплет должен запустить запрос с нужным файлом cookie сеанса в заголовке. Кроме того, вам нужно убедиться, что сервлет работает / слушает в том же домене и контексте.

Для начала передайте идентификатор сеанса в качестве параметра апплету:

<param name="jsessionid" value="${pageContext.session.id}">

Затем в апплете подключите сервлет следующим образом:

String jsessionid = getParameter("jsessionid");
URL servlet = new URL(getCodeBase(), "servleturl");
URLConnection connection = servlet.openConnection();
connection.setRequestProperty("Cookie", "jsessionid=" + jsessionid);
// ...

Здесь servleturl очевидно должно совпадать с url-pattern сервлета в web.xml. Это должно вернуть тот же сеанс обратно в сервлет на request.getSession().

1 голос
/ 13 августа 2013

Хотя @BalusC является правильным (как обычно), я думаю, что может быть и другая причина, по которой JSessionId не отправляется сервлету.

При использовании Weblogic (и я полагаю, что вы делаете), значение по умолчанию печенье-клиента только имеет значение true, что означает, что он не будет отправлять файлы cookie при запросе ресурсов, таких как javascript или апплеты, что означает, что каждый отправляемый апплет запрос будет содержать новый идентификатор сеанса, что не позволяет использовать липкие сеансы.

Более подробную информацию можно найти здесь: https://forums.oracle.com/message/3747820

0 голосов
/ 13 июня 2013

Чтобы установить рабочий сеанс с сервлетом, страница, содержащая ваш апплет, должна была "обслуживаться" сервлетом.
В этот момент вы можете открыть успешное соединение с сервлетом.

Но этот подход работает до tomcat6; У вас есть полный доступ к сеансу.
Благодаря предотвращению фиксации сеанса Tomcat7 новый сеанс создается, когда апплет отправляет свой запрос ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...