Повторное использование объекта RequestDispatcher - PullRequest
0 голосов
/ 26 ноября 2010

Внутри doGet()/doPost() в сервлете у меня есть:

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/pages/view.jsp");
dispatcher.forward(request, response);

Поскольку путь к jsp не относится к текущему запросу, а RequestDispatcher получен из контекста сервлета, могу ли я повторно использовать один и тот же объект диспетчера в нескольких запросах? такой, что RequestDispatcher dispatcher становится переменной экземпляра

init() имеет

dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/pages/view.jsp");

и doGet()/doPost() просто имеют

dispatcher.forward(request, response);

Причина, по которой это делается, заключается в том, чтобы сэкономить стоимость постройки (/ поиска) RequestDispatcher для каждого запроса. Это может на самом деле не иметь значения, если серверная реализация уже кэширует объекты и ищет диспетчер по URL для каждого вызова getRequestDispatcher(), но, получив ссылку на диспетчер в коде в init, мы можем сэкономить на поиске а также.

Также хотите знать, будет ли это потокобезопасным, поскольку каждый раз будет использоваться один и тот же объект диспетчера?

1 Ответ

1 голос
/ 26 ноября 2010

Он должен быть потокобезопасным, но существуют определенные версии / версии servletcontainer, где он не является потокобезопасным.В Apache Tomcat, например, он не был поточно-ориентированным, пока не исправили его в версии 6.0.8.

Я бы поместил этот подход в категорию «преждевременная оптимизация».Я бы так не поступил.

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