tomcat - 如何在 Servlet 代码中获取 JSP 页面作为电子邮件内容

标签 tomcat

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

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

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

最佳答案

我看到了几种解决方案:

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) 您可以注入(inject) JspWriter 的自定义实现,将所有输出重定向到文件(或阅读器...)。一个简单(但有点脏)的实现可能是: 在你的 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。

关于tomcat - 如何在 Servlet 代码中获取 JSP 页面作为电子邮件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18141102/

相关文章:

macos - 知道为什么 org.apache.catalina.startup.Bootstrap 会在 Mac 的扩展坞中弹出吗?

java.lang.OutOfMemoryError : Java heap space with 300MB java. exe 上限

java - 不同的 JVM 行为 : start tomcat from Eclipse vs start from Catalina. bat

java - WebSocket 在 IDEA 中不起作用

java - 有没有办法在 Apache Tomcat 6.x 启动期间执行代码来执行初始化例程等?

java - 如何构建三层 Web 服务

Tomcat 网络应用程序 : Error storing image file outside of context root on OpenShift

tomcat - 无缝继续部署 Maven 项目

java - Apache Tomcat 是否意味着每个托管应用程序安装一次?

带有负载平衡器的 apache2 忽略服务器