Выполнить и визуализировать JSP внутри фильтра - PullRequest
3 голосов
/ 12 мая 2011

У меня есть JSP с содержимым вверху моей страницы, назовем его header.jsp. Я хотел бы визуализировать этот JSP и очистить его перед созданием остальной части моей страницы по соображениям производительности. (См. здесь для объяснения выигрыша в производительности.)

Лучший способ сделать это - создать фильтр с именем FlushingFilter, в котором он записывает содержимое JSP в ответ, а затем очищает его перед выполнением остальной части цепочки. В качестве подтверждения концепции я вручную преобразовал header.jsp в набор вызовов response.getWriter (). Println () внутри моего FlushingFilter, после чего я вызываю response.getWriter (). Flush (), а затем doFilter (). продолжить цепочку фильтров. Эта установка println () возвращает желаемое поведение, и страница работает немного быстрее.

Но перед запуском я бы хотел сделать его более чистым, если это возможно, программно вызывая JSP внутри фильтра вместо необходимости работать с вызовами println () вручную. Ближайшее решение, которое я нашел, это первый ответ на этот вопрос , но он включает в себя вызов метода include () для RequestDispatcher. Насколько я знаю, у меня нет доступа к любому RequestDispatcher внутри моего фильтра, хотя это может быть просто разговором о неопытности моего JSP / сервлета.

Кто-нибудь знает, как я могу программно вызывать JSP, подобный этому, и возвращать его вывод в формате String?

1 Ответ

6 голосов
/ 12 мая 2011

Я знаю, у меня нет доступа к любому RequestDispatcher внутри моего фильтра, хотя это может быть просто мой неопытный JSP / сервлет, говорящий

Это определенно доступно в фильтре.

request.getRequestDispatcher("/WEB-INF/header.jsp").include(request, response);
response.flushBuffer();
...