jsp - 从单个 Web 应用程序中的 servlet 检索 JSP 内容(在 Tomcat 下)

标签 jsp tomcat servlets

首先,对于问题的描述不是很清楚,我深表歉意。假设我们有一些电子邮件发送的工作机制,我们也有一些基于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 )。这种方法非常有效,但如果我无法获得 HttpServletRequestHttpServletResponse 实例,我不知道如何使用这种方法(让我们考虑一下我的 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。而是使用 VelocityFreemarker为您的电子邮件制作模板。

关于jsp - 从单个 Web 应用程序中的 servlet 检索 JSP 内容(在 Tomcat 下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5650174/

相关文章:

java - 在 JSP 中获取 cookie

java - Spring 的安全。授权不适用于jsp

spring-mvc - Spring MVC文件上传和公共(public)目录

java - 我怎样才能用 Action 风格改变jsp html链接

html - 将文本与复选框对齐

java - 如何在 Tomcat 中获取加载的应用程序类列表?

tomcat - 如何更新tomcat的crl

xml - web.xml 文件是否已过时?

java - 为什么使用 IPv6 地址的 HttpServletRequest.getRemoteAddr() 返回额外字符

java - is not abstract and does not override abstract method 错误