首先,对于问题的描述不是很清楚,我深表歉意。假设我们有一些电子邮件发送的工作机制,我们也有一些基于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
方法的方案。 第一种方法是从 servlet 向放置 servlet 和 JSP 模板的 Web 服务器发出 HTTP 请求。好吧,我不喜欢这个......
第二种也是更好的真正有效的方法是从 servlet 上下文中获取请求调度程序并使用响应包装器调用其 include()
方法(此解决方法描述为 here )。这种方法非常有效,但如果我无法获得 HttpServletRequest
和 HttpServletResponse
实例,我不知道如何使用这种方法(让我们考虑一下我的 sendEMail()
方法可以从 servlet service
方法[这里很容易获得 HttpServletRequest/Response 实例] 和作为 web 一部分运行的线程调用应用程序 [其中 HttpServletRequest/Response 实例从未已知,甚至无法传递给线程])。我可以建议我可以以某种方式自己创建 HttpServletRequest
/HttpServletResponse
实例,但我不知道如何以及是否适合 readJsp()
方法基于第二种方法。
因此,问题基本上是关于从不属于 servlet 但在同一 Web 应用程序中运行的线程获取 JSP 内容的第三种(甚至更好)方法。或者是否可以从头开始创建有效的 HttpServletRequest
/HttpServletResponse
实例,使 second 方法在 servlet service()
方法?
有什么想法吗?提前致谢。
最佳答案
您可以尝试使用 Spring 的 MockHttpServletRequest/Response,但据我所知,Tomcat 的 ServletDispatcher.include() 不适用于这些。
如果您无权访问请求/响应对,我建议不要使用 JSP。而是使用 Velocity或 Freemarker为您的电子邮件制作模板。
关于jsp - 从单个 Web 应用程序中的 servlet 检索 JSP 内容(在 Tomcat 下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5650174/