【问题标题】:Retrieving JSP content from a servlet within a single web application (under Tomcat)从单个 Web 应用程序(在 Tomcat 下)中的 servlet 检索 JSP 内容
【发布时间】: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)。这个方法很完美,但我不知道如果我无法获得HttpServletRequestHttpServletResponse 实例,我该如何使用这种方法(让我们考虑一下我的sendEMail() 方法可以从servlet service 方法[很容易在此处获取 HttpServletRequest/Response 实例] 和作为 Web 应用程序的一部分运行的线程[其中 HttpServletRequest/Response 实例从不已知,甚至不能传递给线程])。我可以建议我可以以某种方式自己创建 HttpServletRequest/HttpServletResponse 实例,但我不知道基于 second 的 readJsp() 方法如何以及是否可以strong> 方法。

所以,问题基本上是关于从不属于 servlet 但在同一个 Web 应用程序中运行的线程获取 JSP 内容的第三种(甚至更好)方法。或者是否可以从头开始创建有效的HttpServletRequest/HttpServletResponse 实例,以使 second 方法脱离 servlet service() 方法?

有什么想法吗?提前致谢。

【问题讨论】:

标签: jsp tomcat servlets


【解决方案1】:

您可以尝试使用 Spring 的 MockHttpServletRequest/Response,但据我所知,Tomcat 的 ServletDispatcher.include() 不适用于这些。

如果您无权访问请求/响应对,我建议不要使用 JSP。而是使用 VelocityFreemarker 来模板化您的电子邮件。

【讨论】:

  • 实际上我选择了 JSP,因为它可以很好地集成到我们在项目中实现的 i18n 机制中(并且大多数 JSP 页面已经使用它进行了 i18n 编辑)。我在 FreeMarker 方面有一点经验,而在 Velocity 方面没有。但我会看看。谢谢。
  • 已经涉及到 Velocity 引擎,尽管我仍然无法获得使用 JSP 引擎达到的一些效果。谢谢。
猜你喜欢
  • 2016-02-01
  • 2012-08-27
  • 2013-06-14
  • 2012-04-20
  • 2011-02-09
  • 2018-12-03
相关资源
最近更新 更多