2013-08-09 3 views
0

Я хочу отправить электронное письмо через Google или одну из некоторых других служб электронной почты в свой код сервлета. Поскольку содержимое электронной почты является своего рода динамическим - имя получателя или некоторые другие его части меняются в каждом случае, я хочу использовать JSP-страницу и JSTL-функции, чтобы генерировать содержимое электронной почты.Как я могу получить страницу JSP в виде содержимого электронной почты в коде сервлета

Как я могу получить содержимое страницы с JSP внутри своих кодов сервлета.

Если возможно, я не хочу, чтобы какое-либо местное HTTP-соединение было на странице содержимого электронной почты. Моей средой веб-сервера будут Tomcat 6 и Servelt 2.5.

ответ

1

Я вижу несколько решений:

1) Создайте свой JSP обычно, сделать запрос к нему из класса Java и поместить содержимое ответа в вашей почте. (Найдено в SO here)

URL urlPage = new URL(url); 
HttpURLConnection conn = (HttpURLConnection)urlPage.openConnection(); 
conn.connect(); 
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

//then loop through lines of webpage with br.readLine(); 
//and add it to your mail to send 

2) Вы можете вводить пользовательское внедрение JspWriter redirectiong весь вывод в файл (или чтения ...). Легко (но немного грязный) осуществление этого может быть: В вашей JSP:

<%@page import="foo.bar.JspFileWriter"%> 
<% 
    String fileName = "JspStartContent" + System.currentTimeMillis() + ".html"; 
    out = new JspFileWriter(new File("c:\\Mobile", fileName), out); 

%> 

Имея следующую реализацию JspWriter

public class JspFileWriter extends JspWriter { 

BufferedWriter out; 
JspWriter originalOut; 
/** 
* @param bufferSize 
* @param autoFlush 
*/ 
public JspFileWriter(File file, JspWriter originalOut) { 
    super(originalOut.getBufferSize(), originalOut.isAutoFlush()); 
    try { 
     this.originalOut = originalOut; 
     FileWriter fw = new FileWriter(file); 
     out = new BufferedWriter(fw); 
    } catch (IOException ex) { 
     ; 
    } 


/** 
* @see javax.servlet.jsp.JspWriter#clear() 
*/ 
@Override 
public void clear() throws IOException { 
    originalOut.clear(); 

} 

/** 
* @see javax.servlet.jsp.JspWriter#clearBuffer() 
*/ 
@Override 
public void clearBuffer() throws IOException { 
    originalOut.clearBuffer(); 

} 

/** 
* @see javax.servlet.jsp.JspWriter#close() 
*/ 
@Override 
public void close() throws IOException { 
    originalOut.close(); 
    out.close(); 

} 
    ... 

3) Это не ответ на ваш вопрос, но вы могли бы подумать о XSLT, чтобы сгенерировать ваш HTML.

1

Использование JSP часто очень неудобно для такого рода вещей. Всякий раз, когда мне приходится динамически генерировать контент для чего-либо другого, кроме Интернета, я использую другую структуру целиком. Я отношусь к Apache Velocity, но есть некоторые другие, такие как FreeMarker. Я уверен, что есть и другие.

Я нахожу отдельный каркас более портативным, надежным и прост в работе, чем JSP.