Как я могу создать потокобезопасную страницу JSP

Я хочу создать потокобезопасную страницу JSP. Это возможно в Servlet, реализуя интерфейс SingleThreadModel, но я не знаю, как это сделать на странице JSP.

7
задан vinoth 26 August 2010 в 06:59
поделиться

3 ответа

Теоретически страницы JSP могут быть указаны как потокобезопасные с помощью атрибута директивы страницы isThreadSafe. Установка значения false заставит контейнер синхронизировать доступ к объектам уровня страницы (а не к объектам области сеанса и приложения или объектам любого другого типа). Очевидно, что ответственность за обеспечение синхронного доступа к небезопасным для потоков областям кода по-прежнему лежит на разработчике.

Кроме того, интерфейс SingleThreadModel также объявлен устаревшим в версии 2.4 Спецификации сервлетов. Интерфейс SingleThreadModel также используется для реализации предполагаемой безопасности потоков в JSP: сгенерированные классы сервлетов будут реализовывать SingleThreadModel для JSP, использующих атрибут threadsafe. В самой спецификации указано, почему интерфейс устарел:

SRV.2.2.1 Примечание о модели с одним потоком

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

Рекомендуется, чтобы разработчик использовать другие средства для решения этих проблемы вместо реализации этого интерфейс, например, избегать использования переменной экземпляра или синхронизация блока кода доступ к этим ресурсам. То Интерфейс SingleThreadModel не рекомендуется в этой версии Спецификация.

9
ответ дан 6 December 2019 в 09:57
поделиться

Говорить о потокобезопасности JSP неправильно. JSP — это технология просмотра, и она только отображает результаты, но не выполняет никакой обработки. (он может выполнять обработку, но не должен)

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

Вы должны точно указать, что вы подразумеваете под "потокобезопасностью" в вашем случае, т.е. что вы ожидаете от сбоя.

1
ответ дан 6 December 2019 в 09:57
поделиться

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

1
ответ дан 6 December 2019 в 09:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: