【发布时间】:2012-01-09 01:59:15
【问题描述】:
我在 JAR 中有一个无法更改的第三方 servlet。我已经扩展了该 servlet 并正常使用它,因为应该使用 servlet,客户端发出一个调用我的 servlet 的 HTTP 请求。
但是现在客户端想要一个自动服务,也就是说,我需要从 servlet 所在的同一个 webapp 向那个第三方 servlet 发出一些请求。
我查看了第三方 servlet 代码,但我没有找到绕过 servlet 的地方,因为 HttpServletRequest 和 HttpServletResponse 对象是从一个方法传递到另一个方法...基本上看来我需要重新实现所有第三方代码。
我找到但不满意的解决方案:
使用 HttpURLConnection 从 URL 调用 servlet: 我的常识是从 url 调用第三方 servlet 并不是最好的方法 去吧,除了增加的开销,我不想暴露第三方 小服务程序。从 url 调用我的 servlet 也会带来问题 会议和其他事情。
直接调用doGet:这似乎是不可能的,因为没有HttpServletRequest的实现和 HttpServletResponse。
使用 jMock 或类似的东西: 尚未探索此解决方案,但在实际中使用测试驱动库似乎是错误的 环境。
有人知道如何与第三方 servlet 交互吗?
编辑:
由于我的英语不是很好,而且我发现自己很难在这里解释自己,所以这里有一个示意图来尝试更好地解释
EDIT2:在与第三方制造商会面后,他们提出隔离我需要避免调用 servlet 的方法。如果你没有同样的运气,我确实检查了 gigadot 和 BalusC 的答案。
【问题讨论】:
-
你想用 servlet 做什么?答案将取决于它。既然你什么都没说,我认为你没有通用的解决方案。
-
“自动服务”是什么?
-
将请求转发到该 servlet 不是一种选择?
-
@gigadot servlet 是一个复杂的第三方解决方案,可以做很多事情,基本上它就像一个报告实用程序。在这种情况下,我需要让 servlet 及时为我生成特定报告类型的报告(和其他参数),然后我不需要结果,但它们将保留在会话中,然后我会做另一个调用 servlet 以在会话中请求一个带有结果的 xls 文件。我不知道我是否解释得很好,但它是一个非常复杂的系统。
-
您可以尝试使用 Servlet API 类的现有存根实现。有很多这样的实现,尽管它们通常是大型项目的一部分,例如 Spring Test。