Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Вопросик из области Web-Programmierung, Java

09.09.15 17:04
Re: Вопросик из области Web-Programmierung, Java
 
MrSanders старожил
в ответ v0id* 09.09.15 14:18
В ответ на:
Я ведь запостил код сервлета, который Вы просили, а что еще надо?

Пока что в этих кусках кода не видно где же какое-то нестандартное поведение с сессией происходит.
Давайте так, я вам коротенько расскажу как обычно томкат работает с HttpSession.
1. Клиент запрашивает url http://myserver.com/myservlet
2. Http сервер передает запрос томкату (ну или сам томкат слушает 80-й порт).
3. Томкат смотрит - есть ли у запроса идентификатор сессии. Это или куки JSESSIONID или дополнение к URL, который выглядит тогда как http://myserver.com/myservlet;jsessionid=abcd1234
4. Если идентификатора нет, томкат создает новую сессию. Генерирует для нее ID и создает новый объект HttpSession. Если идентификатор и для него существует сессия, томкат берет cуществующий HttpSession
Томкат может поменять id сессии, в зависимости от настроек.
5. Томкат отвечат на запрос и передает ID текущей сессии или как куки в заголовке ответа "Set-Cookie" или переписывая все ссылки в ответе, добавляя к ним ;jsessionid=<текущий ID>
6. Клиент или сохраняет куки или просто использует переписанные ссылки.
N.B. Кстати, а посмотрите в каком месте в вашем коде пишется в лог "DCC_4 (25) I: request for access key: 540C407B5B9122D19AFC1588C2A49579". Узнаете откуда берется этот ID.
Вы уверены что общение с сервлетом идет через doRequest(ServletTransferObject). В этом методе не делается ничего чтобы передать томкату инормацию о сессии. Ни куки в заголовок не добавляются, ни ;jsessionid с текущим ID сессии. Из ответа новый JSESSIONID тоже не считывается. "Автоматически" это не происходит.
Итого. По увиденному коду я ожидаю новую HttpSession на томкате, каждый раз, когда на сервлет приходит запрос.
Если вы в данный момент отличать запущенные на одном компе копии апплета не можете, сделайте следующее:
1. При запуске апплета (в init-е) генерируйте MD5 хэш. Например из текущего времени и еще чего-нибудь случайного.
2. Расширьте ServlerTransferObject: добавьте поле appletId, в которое перед отравкой на сервер будете вписывать ид апплета.
3. На сервере в doPost читаем этот ID из запроса. Профит. Он и будет uniqueClientId из моего предыдущего примера.
Да, чтобы найти где же у вас конфигурация для ndServet-а поищите в вашем проекте или в томкатовском каталоге, куда сервлет деплоится, файл web.xml в котором содержатися параметры сервера "HostName", "HandleCommunication" и т.п. (см. код ndServlet.init(ServletConfig)). Выглядит это примерно так:
<init-param>
<param-name>HostName</param-name>
<param-value>a.b.com</param-value>
</init-param>


P.S. Совет - чтбы написать ругательные слова Object, script, applet, пишите их как Obje[i][/i]ct. Тогда движок их не находит и не выбрасывает.

 

Перейти на