Сервлеты Java - запросы Ajax возвращаются со смешанными ответами - PullRequest
2 голосов
/ 07 апреля 2011

Я получаю некоторые странные результаты, посылая несколько асинхронных вызовов AJAX на один и тот же Java-сервлет примерно в одно и то же время.

Например, скажем, я отправляю два запроса AJAX одновременно, используя jQuery.

//ajax call foo
$.post('LookupServlet', {
  method: 'findFoo'
};

//ajax call bar
$.post('LookupServlet', {
  method: 'findBar'
};

В моем сервлете он вызывает данный метод.Метод записывает ответ в поток.

Странно то, что foo иногда получает ответ для bar.И наоборот.Или иногда один ajax-вызов получает оба ответа.Или один запрос получает ответ, а другой нет.

Я никогда не видел ничего подобного раньше на других серверных языках, я даже не знал, что это возможно. У кого-нибудь есть теории относительно того, почему это происходит?Как работают Java-сервлеты, когда одновременные запросы могут получать перекрестные ответы?

1 Ответ

3 голосов
/ 07 апреля 2011

Вероятная причина в том, что сервлеты не написаны для обеспечения безопасности потоков. Обратите внимание, что объект, содержащий методы сервлета, может использоваться для ответа на множество одновременных запросов. Если этот метод использует переменную уровня класса для создания ответа, то запросы будут выглядеть «перепутанными».

Итак. Приходит запрос № 1, назначается экземпляру сервлета, экземпляр № 1

Соответствующий метод вызывается в экземпляре # 1, который начинает использовать переменную класса для вычисления результата. Экземпляр # 1.myVariable = "Бла"

Теперь приходит запрос № 2, который также назначен экземпляру № 1

Опять же, соответствующий метод вызывается в экземпляре # 1, который устанавливает Instance # 1.myVariable = "Foo"

.. тем временем первый запрос завершается и возвращает экземпляр # 1.myVariable ... "Foo"!

.. и затем второй запрос завершается, а также возвращает «Foo».

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