Прежде всего, я хочу извиниться за не очень четкое описание вопроса. Давайте рассмотрим, у нас есть некоторый рабочий механизм для отправки электронной почты, а также у нас есть механизм шаблонов электронной почты, основанный на обработчике 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()
?
Есть идеи? Заранее спасибо.