0

サーブレット コードで、Google またはその他のメール サービスのいずれかを介してメールを送信したいと考えています。電子メールの内容は一種の動的なものであるため、受信者の名前やその他の部分はケースごとに異なるため、JSP ページと JSTL 機能を使用して電子メールの内容を生成したいと考えています。

JSP で生成されたページ コンテンツをサーブレット コードで内部的に取得するにはどうすればよいですか。

可能であれば、電子メール コンテンツ ページへのローカル HTTP 接続を作成したくありません。私の Web サーバー環境は、Tomcat 6 と Servelt 2.5 です。

4

2 に答える 2

1

JSP を使用することは、この種の場合には非常に扱いにくいことがよくあります。Web 以外のコンテンツを動的に生成する必要があるときはいつでも、まったく別のフレームワークを使用します。私はApache Velocityの一部ですが、 FreeMarkerのようなものは他にもいくつかあります。他にもいると思います。

別のフレームワークは、JSP よりも移植性が高く、信頼性が高く、操作しやすいと思います。

于 2013-08-10T13:32:15.690 に答える
1

いくつかの解決策があります:

1) 普通に JSP を作成し、Java クラスから JSP にリクエストを送信し、レスポンスの内容をメールに入れます。(ここでSOにあります)

 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のカスタム実装を挿入できます。これの簡単な (しかし少し汚れた) 実装は次のようになります: 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 を生成することを検討してください。

于 2013-08-09T08:30:32.750 に答える