【问题标题】:How can I get JSP page as e-mail contents in Servlet code如何在 Servlet 代码中获取 JSP 页面作为电子邮件内容
【发布时间】:2013-08-11 01:20:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: tomcat


    【解决方案1】:

    我看到了几种解决方案:

    1) 正常创建您的JSP,从java 类向它发出请求并将响应内容放入您的邮件中。 (发现于 SOhere

     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。

    【讨论】:

      【解决方案2】:

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

      我发现一个单独的框架比 JSP 更便携、更可靠且更易于使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-06
        • 1970-01-01
        • 2011-04-15
        • 2013-04-05
        • 1970-01-01
        • 1970-01-01
        • 2014-11-14
        相关资源
        最近更新 更多