Получение содержимого JSP из сервлета в одном веб-приложении (под Tomcat) - PullRequest
0 голосов
/ 13 апреля 2011

Прежде всего, я хочу извиниться за не очень четкое описание вопроса. Давайте рассмотрим, у нас есть некоторый рабочий механизм для отправки электронной почты, а также у нас есть механизм шаблонов электронной почты, основанный на обработчике JSP. Допустим, к этим шаблонам можно * получить прямой доступ, например, http://localhost/app/templates/template1.jsp?k1=v1&k2=v2, и они всегда возвращают HTML-код, который может быть вставлен в электронное письмо для определенного пользователя в фоновом коде. Проще говоря, сокращенный код может выглядеть следующим образом:

Map<String, String> parameters = new HashMap<String, String>() {{ ..puts.. }};
String message = readJsp("/templates/template1.jsp", parameters); // servlet-context?
sendEMail(recipient, subject, message)

В настоящее время я нашел два решения для реализации метода readJsp. Подход first состоит в том, чтобы сделать HTTP-запрос от сервлета к веб-серверу, на котором размещены и сервлет, и JSP-шаблон. Ну, я не фанат этого ...

секунда и гораздо лучший способ, который действительно работает, - это получение диспетчера запросов из контекста сервлета и вызов его метода include() с оберткой ответа (этот способ обхода описан здесь ). Этот метод прекрасно работает, но я не знаю, как я могу использовать этот подход, если я не могу получить экземпляры HttpServletRequest и HttpServletResponse (давайте рассмотрим мой метод sendEMail(), который можно вызывать как из сервлета service method [здесь легко получить экземпляры HttpServletRequest / Response] и поток, который работает как часть веб-приложения [где экземпляр HttpServletRequest / Response никогда не известен и даже не может быть передается в тему] ). Я могу предложить, что я могу создать экземпляры HttpServletRequest / HttpServletResponse самостоятельно определенным способом, но я не знаю, как и будет ли это нормально для этого readJsp() метода, основанного на second подход.

Итак, вопрос в основном о, возможно, 3-м (и даже лучше) способе получения содержимого JSP из потока, который не принадлежит сервлету, но работает в том же веб-приложении. Или можно создать действительные HttpServletRequest / HttpServletResponse экземпляры с нуля, чтобы подход second работал из метода сервлета service()?

Есть идеи? Заранее спасибо.

1 Ответ

2 голосов
/ 13 апреля 2011

Вы можете попробовать использовать Spring MockHttpServletRequest / Response, но, как я слышал, Tomcat ServletDispatcher.include () не работает с ними.

Я бы порекомендовал , а не , используя JSP вслучай, когда у вас нет доступа к паре запрос / ответ.Вместо этого используйте Velocity или Freemarker для шаблонов ваших писем.

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