使用 Struts2 视图发送模板电子邮件
Send Template Email Using Struts2 View
我正在使用 Struts2,我想将我的其中一个操作的 html 输出作为电子邮件发送。
换句话说,我不想在浏览器中显示输出 html,而是想将其作为电子邮件发送。
我正在使用 Apache Tiles 创建我的页面。
编辑:
一般来说,我们能否将 struts 视图的 html 结果作为流并将其传递给另一个操作?
首先,我需要说明一下,使用 JSP 作为电子邮件模板并不是一个好主意。但是,如果您需要这样做,或者您需要记录用户看到的确切 HTML(或任何其他原因),您可以这样做:
- 为您的操作创建拦截器
- 从 ServletActionContext 获取响应
- 包装响应
- 调用动作
- 获取(甚至更改)响应。
- return结果。
这是我的部分代码:
import java.io.CharArrayWriter;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
//STEP 1
public class EmailInterceptor implements Interceptor {
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
// STEP 2
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter out = response.getWriter();
// STEP 3
CharResponseWrapper responseWrapper = new CharResponseWrapper((HttpServletResponse) response);
ServletActionContext.setResponse(responseWrapper);
// STEP 4
String result = actionInvocation.invoke();
// STEP 5
String servletResponse = new String(responseWrapper.toString());
out.write(servletResponse + "whatever");
// STEP 6
return result;
}
public class CharResponseWrapper extends HttpServletResponseWrapper {
private CharArrayWriter output;
public String toString() {
return output.toString();
}
public CharResponseWrapper(HttpServletResponse response) {
super(response);
output = new CharArrayWriter();
}
public PrintWriter getWriter() {
return new PrintWriter(output);
}
}
}
我正在使用 Struts2,我想将我的其中一个操作的 html 输出作为电子邮件发送。 换句话说,我不想在浏览器中显示输出 html,而是想将其作为电子邮件发送。
我正在使用 Apache Tiles 创建我的页面。
编辑: 一般来说,我们能否将 struts 视图的 html 结果作为流并将其传递给另一个操作?
首先,我需要说明一下,使用 JSP 作为电子邮件模板并不是一个好主意。但是,如果您需要这样做,或者您需要记录用户看到的确切 HTML(或任何其他原因),您可以这样做:
- 为您的操作创建拦截器
- 从 ServletActionContext 获取响应
- 包装响应
- 调用动作
- 获取(甚至更改)响应。
- return结果。
这是我的部分代码:
import java.io.CharArrayWriter;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
//STEP 1
public class EmailInterceptor implements Interceptor {
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
// STEP 2
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter out = response.getWriter();
// STEP 3
CharResponseWrapper responseWrapper = new CharResponseWrapper((HttpServletResponse) response);
ServletActionContext.setResponse(responseWrapper);
// STEP 4
String result = actionInvocation.invoke();
// STEP 5
String servletResponse = new String(responseWrapper.toString());
out.write(servletResponse + "whatever");
// STEP 6
return result;
}
public class CharResponseWrapper extends HttpServletResponseWrapper {
private CharArrayWriter output;
public String toString() {
return output.toString();
}
public CharResponseWrapper(HttpServletResponse response) {
super(response);
output = new CharArrayWriter();
}
public PrintWriter getWriter() {
return new PrintWriter(output);
}
}
}