【发布时间】:2011-04-13 13:36:38
【问题描述】:
首先,我想对这个问题的描述不那么清楚表示歉意。假设我们有一些电子邮件发送的工作机制,我们也有一些基于JSP 处理引擎的电子邮件模板机制。比方说,这些模板可以像http://localhost/app/templates/template1.jsp?k1=v1&k2=v2 一样直接访问,并且总是返回一个HTML,该HTML 可以插入到后端代码中某个用户的电子邮件中。简单地说,简写代码可能如下所示:
Map<String, String> parameters = new HashMap<String, String>() {{ ..puts.. }};
String message = readJsp("/templates/template1.jsp", parameters); // servlet-context?
sendEMail(recipient, subject, message)
目前我找到了两种实现readJsp 方法的解决方案。 first 方法是从 servlet 向放置 servlet 和 JSP-template 的 Web 服务器发出 HTTP 请求。好吧,我不是这个的粉丝......
真正有效的第二个更好的方法是从 servlet 上下文中获取请求调度程序,并使用响应包装器调用其include() 方法(这种解决方法被描述为here)。这个方法很完美,但我不知道如果我无法获得HttpServletRequest 和HttpServletResponse 实例,我该如何使用这种方法(让我们考虑一下我的sendEMail() 方法可以从servlet service 方法[很容易在此处获取 HttpServletRequest/Response 实例] 和作为 Web 应用程序的一部分运行的线程[其中 HttpServletRequest/Response 实例从不已知,甚至不能传递给线程])。我可以建议我可以以某种方式自己创建 HttpServletRequest/HttpServletResponse 实例,但我不知道基于 second 的 readJsp() 方法如何以及是否可以strong> 方法。
所以,问题基本上是关于从不属于 servlet 但在同一个 Web 应用程序中运行的线程获取 JSP 内容的第三种(甚至更好)方法。或者是否可以从头开始创建有效的HttpServletRequest/HttpServletResponse 实例,以使 second 方法脱离 servlet service() 方法?
有什么想法吗?提前致谢。
【问题讨论】:
-
@ericacm,考虑我既没有原始请求也没有原始响应对象,因为我有一个线程无法接受请求和请求。并且... JSP 输出不会传输到客户端。 JSP 输出应放入发件人线程发送的电子邮件正文中。