首先,我想为没有这么清楚的问题描述而道歉。让我们考虑一下我们有一些电子邮件发送的工作机制,我们也有一些基于JSP处理引擎的电子邮件模板机制。假设这些模板可能可以像http://localhost/app/templates/template1.jsp?k1=v1&k2=v2一样直接访问,并且总是返回一个HTML,可以插入到后端代码中某个用户的电子邮件中。简单地说,简写代码可能如下所示:
Map<String, String> parameters = new HashMap<String, String>() {{ ..puts.. }};
String message = readJsp("/templates/template1.jsp", parameters); // servlet-context?
sendEMail(recipient, subject, message)
目前我找到了两种实现readJsp
方法的解决方案。 第一个方法是从servlet向web服务器发出HTTP请求,其中servlet和JSP-template都放在该服务器上。好吧,我不是这个的粉丝......
第二以及真正有效的更好的方法是从servlet上下文获取请求调度程序并使用响应包装器调用其include()
方法(此工作原理描述为{{3 }})。这种方法很完美,但是如果我不能得到HttpServletRequest
和HttpServletResponse
个实例,我不知道如何使用这种方法(我们可以考虑从servlet调用我的sendEMail()
方法service
方法 [这里很容易得到HttpServletRequest / Response实例] 和一个作为Web应用程序 [其中HttpServletRequest / Response实例的一部分运行的线程永远已知,甚至无法传递给线程] )。我可以建议我可以以某种方式自己创建HttpServletRequest
/ HttpServletResponse
个实例,但我不知道基于此方法的readJsp()
方法如何以及是否可行第二次方法。
因此,问题基本上可能是从不属于servlet但在同一Web应用程序中运行的线程获取JSP内容的第三种(甚至更好)方式。或者是否可以从头开始创建有效的HttpServletRequest
/ HttpServletResponse
实例,以使第二个方法在servlet service()
方法之外工作?
有什么想法吗?提前谢谢。
答案 0 :(得分:2)
您可以尝试使用Spring的MockHttpServletRequest / Response,但据我所知,Tomcat的ServletDispatcher.include()不适用于那些。
如果您无权访问请求/响应对,我建议使用JSP not 。而是使用Velocity或Freemarker为您的电子邮件设置模板。