繁体   English   中英

如何从java调用servlet

[英]How to call servlet from java

我在JAR中有一个我无法改变的第三方servlet。 我已经扩展了该servlet并且正常使用它,因为应该使用servlet,客户端发出一个调用我的servlet的HTTP请求。

但是现在客户端想要一个自动服务,也就是说,我需要从servlet所在的同一个webapp对该第三方servlet做一些请求。

我查看了第三方servlet代码,但我没有找到绕过servlet的地方因为HttpServletRequest和HttpServletResponse对象从方法传递给方法......基本上我似乎需要重新实现所有第三方派对代码。

我找到的解决方案,但不满足我:

使用HttpURLConnection从URL调用servlet:我的常识是从URL调用第三方servlet不是最好的方法,除了增加的开销之外,我不想公开第三方servlet。 从URL调用我的servlet也会带来会话和其他事情的问题。

直接调用doGet:这似乎是不可能的,因为没有HttpServletRequest和HttpServletResponse的实现。

使用jMock或类似的东西:尚未探索此解决方案,但在真实环境中使用测试驱动的库会出错。

任何人都知道如何与第三方servlet交互?

编辑:

由于我的英语不是很好,我发现自己很难解释,这里有一个原理图,试图更好地解释

概要

编辑2:在与第三方制造商会面后,他们提出隔离我需要避免调用servlet的方法。 如果你没有同样的运气,我确实检查了gigadotBalusC的答案。

从URL调用我的servlet也会带来会话和其他事情的问题。

如果这是唯一的问题,那么只需使用CookieManager在后续的URLConnection调用中维护cookie(以及会话)。

// First set the default cookie manager.
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));

// All the following subsequent URLConnections will use the same cookie manager.
URLConnection connection = new URL(url).openConnection();
// ...

connection = new URL(url).openConnection();
// ...

connection = new URL(url).openConnection();
// ...

也可以看看:

如果我正确理解您的问题,您已实现或拥有为您生成报告的第三方servlet。

现在你要做的是定期生成报告并存储在会话中,这样当用户想要获取报告时,他们可以使用另一个servlet检索它。

如果是这种情况,那么您希望在服务器上定期运行该任务。 您需要某种任务调度程序才能在您的服务器上运行,而该任务的作用只是向您的servlet发出http请求(这可以是http GET或POST)。

您可以尝试将servlet逻辑分成几个阶段。 获取请求/结果的入口点,处理已发送参数的操作并生成输出。

public void doGet(HttpServletRequest req, HttpServletResponse rsp){
    relay(rsp,act(req.getParameter("a"));
}

public static String act(String a){
    return "You provided: " + a;
}

public static void relay(HttpServletResponse rsp, String content){
    rsp.setResponseCode(200);
    rsp.getOutputStream().write(content.getBytes());
}

这使您可以调用act(无论如何)来执行您想要的操作,然后使用响应执行您想要的操作。 如果返回一个字符串是不够的,你可以创建你想要的任何返回类型,可能包含一个标题列表,响应代码和内容模板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM