gpt4 book ai didi

java - 如何避免从 Java Web 服务器向自身发送 HTTP 请求?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:00:02 25 4
gpt4 key购买 nike

真实情况是这样的:Java 网络服务器 (Weblogic) 收到用户的请求,它必须发送 ZIP 存档作为响应。存档必须根据用户要求的一些文件动态生成,并由服务器本身生成一份 HTML 报告。我想重用服务器已在其他情况下使用的 JSF servlet 来生成此报告。所以,基本上,我使用的是:

HttpURLConnection  self = new URL ("http://me.myself.com/report.jsf?...").openConnection ();
String report_html = fetchHtmlFromConnection (self);

然后创建请求的 ZIP,其中包括生成的 HTML。

问题是,在这种情况下,我能否以某种方式避免发出内部 HTTP 请求(到 report.jsf)?这基本上涉及到通过操作系统、HTTPD(可能在不同机器上)等的往返(因为应用程序只是与自身“对话”)等。

最佳答案

我对 JSF 不是很熟悉,但据我了解,您可以使用同样适用于 JSP 页面的技术:

  • 创建您自己的 HttpServletResponseWrapper(容器使用的类,可让您修改响应)
  • 使用它来覆盖默认的 Writer(将呈现的页面写入输出)并提供一个将输出写入 String 或一个临时文件提供压缩代码。

有一个简单易用的教程向您展示了如何做到这一点: http://blog.valotas.com/2011/09/get-output-of-jsp-or-servlet-response.html

然后

  • 正如 gyan 所暗示的那样,从您的 servlet 中获取一个 ServletRequestDispatcher,它将允许您调用 JSF 的呈现
  • 转发 servlet 调用以提供您自己的 HttpServletResponseWrapper
  • 使用您的 HttpServletResponseWrapper 获取呈现的 HTML 并将其提供给压缩代码。

所以压缩的 Servlet 应该是这样的:

TempFileRespWrapper respWrapper = new TempFileRespWrapper();
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher( "/report.jsf");
dispatcher.forward(request, respWrapper);
File f = respWrapper.getOutputPath();
addFileToZip(f);

关于java - 如何避免从 Java Web 服务器向自身发送 HTTP 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19268016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com