如何将JSP页面作为Servlet代码中的电子邮件内容

时间:2013-08-09 06:22:09

标签: tomcat

我想通过Google或其他一些电子邮件服务在我的Servlet代码中发送电子邮件。 由于电子邮件内容是动态的 - 接收者的名字或其他一些部分因具体情况而异,我想在其中使用JSP页面和JSTL功能来生成电子邮件内容。

如何在Servlet代码中内部获取JSP生成的页面内容。

如果可能,我不想与电子邮件内容页面建立任何本地HTTP连接。 我的Web服务器环境是Tomcat 6和Servelt 2.5。

2 个答案:

答案 0 :(得分: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的自定义实现重定向所有输出到文件(或Reader ...)。一个简单(但有点脏)的实现可能是:  在您的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 :(得分:1)

对于这种事情,使用JSP通常很尴尬。每当我必须动态生成除Web以外的任何内容时,我会完全使用不同的框架。我有点偏向Apache Velocity,但还有其他一些像FreeMarker。我确定还有其他人。

我发现一个单独的框架比JSP更易于移植,更可靠,更易于使用。