2013-03-04 2 views
0

Мне нужно отправить электронные письма в формате HTML. Кажется, HTML-адрес электронной почты считается элементом «view», поэтому имеет смысл отображать его с помощью JSP.Может ли простой Java-объект использовать/захватывать/включать JSP-выход?

Однако задача электронной почты будет написана на чистой Java. Как я могу получить JSP-выход в Java?

т.е. я себе:

emailbody.jsp:

<c:out var="invoicebody"> 
    <lots of html> 
    ${invoice.price} etc... 
</c:out> 

emailsend.java:

setup db connection 
setup email 
call emailbody.jsp 
email.body = invoicebody 
email.send etc... 

Что-то в этом роде ...

Сейчас я соскабливания его через HTTP-сервер, но это просто кажется неправильным.

Каков наилучший способ отформатировать HTML-письма? Использование Tomcat 7, Servlet 3.0 ...

Спасибо

+0

Является ли задатчик электронной почты в вашем веб-приложении? Считаете ли вы использование HttpURLConnection? – rickz

+0

http://stackoverflow.com/questions/1075827/execute-jsp-directly-from-java/1076056#1076056 –

+0

Я пытаюсь избежать сосания jsp через http-сервер. Это не лучший способ. Я также не хочу, чтобы jsp был доступен извне. Я также не хочу, чтобы это зависело от концепции The Mock Objects, которая кажется интересной ... Мог бы мой лучший выбор ... – PrecisionPete

ответ

1

Вы можете использовать язык сценариев, как MVEL для заполнения HTML-файл, который вы хотите отправить, как электронная почта.

Проверить это MVEL 2.0 Templating Guide

Я надеюсь, что это ставит вас в правильном направлении.

Есть и другие альтернативы, как Шимон Bilinski указал out.Listing их ниже

+1

Freemarker и Velocity - это другие распространенные инструменты, которые применяются. –

+0

Также кажется интересным. Я не хотел вводить другой язык шаблонов, поскольку JSP в значительной степени таков. Но мне нравится, что он больше не зависит от http-сервера. – PrecisionPete

0

Там уже есть хорошее решение с использованием библиотеки тегов для почты отправки.

Просто позвоните в jsp, вам не нужно захватывать html.

+0

Попытка вытащить его из JSP. Он замедляет выполнение приложения, не регистрируется и не перезаписывается, если что-то пойдет не так. например нет реле SMTP. Вместо этого я помещаю запросы в базу данных и выполняю пакетное задание для отправки писем. Поскольку пакетное задание не является веб-страницей, я не хочу запускать его через веб-сервер. – PrecisionPete

+0

... и вы не можете это сделать, вы вряд ли сможете отлаживать и нет хорошего решения для черных списков, и так далее. Ну, это простая реализация и не подходит для такой необходимости. Я не знал, что нужно, я создам новый ответ. –

1

Вы можете вызвать URL вашего собственного WebApplication так:

public static String getEmailBody(final String triggerId) throws IOException { 

     URL url = new URL("http://localhost:8080/emailbody.jsp?triggerId=" 
       + triggerId); 
     URLConnection openConnection = url.openConnection(); 
     openConnection.setReadTimeout(100); 
     InputStream inputStream = openConnection.getInputStream(); 
     int read; 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     do { 
      byte[] bytes = new byte[1024]; 
      read = inputStream.read(bytes); 
      baos.write(bytes); 
     } while (read > 0); 
     return baos.toString(); 
    } 

Это наиболее удаленные Methode, потому что у вас есть «реальный» прочитать HttpRequest и HttpResponse.

Смежные вопросы