Внутри 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
, мы можем сэкономить на поиске а также.
Также хотите знать, будет ли это потокобезопасным, поскольку каждый раз будет использоваться один и тот же объект диспетчера?