J. *_*ugh 40 java email templates frameworks
我们有一个应用程序,需要发送各种不同类型的模板电子邮件.目前的代码非常繁琐且不够灵活.有没有人能够帮助这种类型的工作...我们正在寻找某种用于电子邮件的模板库.
Dav*_*Ray 23
StringTemplate也是一个非常好的模板引擎.
Jan*_*ert 23
Jack Leow说他写了一个自定义的HttpServletResponse,以便他可以重新使用JSP来生成电子邮件模板,我只是做了同样的事情,并希望为那些不确定从哪里开始的人分享我的代码示例/原型:
通常在提供JSP页面时,你会做这样的事情:
res.setContentType("text/html");
RequestDispatcher jsp = req.getRequestDispatcher("/WEB-INF/templates/" + template);
res.setStatus(200);
jsp.forward(req, res);
Run Code Online (Sandbox Code Playgroud)
现在,不要将jsp.forward转换为HttpServletResponse,而是为自定义Servlet响应执行jsp.forward:
EmailServletResponse res2 = new EmailServletResponse();
jsp.forward(req, res2);
System.out.println(res2.toString()); <<-- email gets printed here
Run Code Online (Sandbox Code Playgroud)
您的EmailServlet响应将只是一个实现HttpServletResponse的类,填充空白并使用底层StringWriter来完成toString转换:
public class EmailServletResponse implements HttpServletResponse {
private int status;
private StringWriter sw = new StringWriter();
@Override
public void flushBuffer() throws IOException {
sw.flush();
}
@Override
public int getBufferSize() {
return 1024;
}
@Override
public String getCharacterEncoding() {
return "UTF-8";
}
@Override
public String getContentType() {
return "text/html";
}
@Override
public Locale getLocale() {
return Locale.getDefault();
}
@Override
public ServletOutputStream getOutputStream() throws IOException {
return new ServletOutputStream() {
@Override
public void write(int b) throws IOException {
sw.write(b);
}
};
}
@Override
public PrintWriter getWriter() throws IOException {
PrintWriter pw = new PrintWriter(sw);
return pw;
}
@Override
public boolean isCommitted() {
return false;
}
@Override
public void reset() {
}
@Override
public void resetBuffer() {
}
@Override
public void setBufferSize(int arg0) {
}
@Override
public void setCharacterEncoding(String arg0) {
}
@Override
public void setContentLength(int arg0) {
}
@Override
public void setContentType(String arg0) {
}
@Override
public void setLocale(Locale arg0) {
}
@Override
public void addCookie(Cookie arg0) {
}
@Override
public void addDateHeader(String arg0, long arg1) {
}
@Override
public void addHeader(String arg0, String arg1) {
}
@Override
public void addIntHeader(String arg0, int arg1) {
}
@Override
public boolean containsHeader(String arg0) {
return false;
}
@Override
public String encodeRedirectURL(String arg0) {
return "";
}
@Override
public String encodeRedirectUrl(String arg0) {
return "";
}
@Override
public String encodeURL(String arg0) {
return "";
}
@Override
public String encodeUrl(String arg0) {
return "";
}
@Override
public void sendError(int arg0) throws IOException {
}
@Override
public void sendError(int arg0, String arg1) throws IOException {
}
@Override
public void sendRedirect(String arg0) throws IOException {
}
@Override
public void setDateHeader(String arg0, long arg1) {
}
@Override
public void setHeader(String arg0, String arg1) {
}
@Override
public void setIntHeader(String arg0, int arg1) {
}
@Override
public void setStatus(int status) {
this.status = status;
}
@Override
public void setStatus(int status, String message) {
setStatus(status);
}
public String toString(){
return sw.getBuffer().toString();
}
}
Run Code Online (Sandbox Code Playgroud)
随意在需要的地方改进代码,这是一个快速的原型设计会话:)
Jac*_*eow 18
一年前我遇到了类似的问题.在我们的例子中,我们的前端开发人员都熟悉JSP,我真的不想将另一个模板引擎添加到组合中.我想要一些依赖于servlet容器的JSP处理器来为我生成电子邮件内容的东西.
这很简单:
HttpServletResponse,ServletOutputStream它捕获由servlet容器编写的内容并将其转换为String,并依赖于RequestDispatcher.include(...)对模板JSP发出"请求"(我还编写了一个自定义HttpServletRequest来隔离原始请求与变异).Ade*_*ari 15
我更喜欢Freemarker,而不是Velocity; imo,Freemarker在这种情况下更简单.
如果您使用的是Spring,那么您可能对Spring MVC中的Freemarker感兴趣.
| 归档时间: |
|
| 查看次数: |
55363 次 |
| 最近记录: |