Как JSP обрабатывает параллельные запросы? - PullRequest
0 голосов
/ 22 марта 2011

Полагаю, мой вопрос в том, что JSP скомпилирован в один экземпляр сервлета, который обслуживает несколько запросов. Как я могу сделать это потокобезопасным?

Ответы [ 4 ]

4 голосов
/ 22 марта 2011

Сервлеты должны быть неизменными.Либо не существует состояния вне вызовов методов (сервлет не имеет состояния), либо любое такое состояние никогда не изменится (поэтому состояние, которое видит каждый поток, всегда одинаково).

Очень просто написать потокобезопасный сервлет: никогда использовать переменные экземпляра.Используйте локальные переменные метода.

2 голосов
/ 22 марта 2011

Только не назначайте данные запроса / сеанса в качестве глобальных / статических переменных.Поэтому до тех пор, пока вы не используете скриптлет объявлений <%! %>, которые вы назначаете с данными, специфичными для запроса / сеанса, и не помещаете данные запроса / сеанса в область приложения (т. Е. Как атрибут ServletContext), тогда вы в безопасности.

См. Также:

1 голос
/ 22 марта 2011

JSP скомпилированы в сервлеты. Все переменные JSP являются локальными (стековыми) переменными метода, поэтому они являются потокобезопасными.

Если вы непосредственно добавите потокобезопасный атрибут в класс сервлета, он перестанет быть поточно-безопасным.

1 голос
/ 22 марта 2011

Попробуйте это: <% @ page isThreadSafe = "true"%>

...