【发布时间】:2011-07-01 06:08:54
【问题描述】:
大家好,下面是概要:
基本上,我想要的是:PL/SQL 过程调用(使用 UTL_HTTP)--> Java Web 应用程序,Servlet --> 打开浏览器窗口并呈现 PDF。
为此,我们在 PL/SQL 过程中使用包 UTL_HTTP,因为它可以选择通过 POST 方法向外部 url 发送请求。我们使用这个包的唯一原因是确保我们的数据作为 POST 参数传递(显然,在通过 POST 方法传递参数时,没有其他方法可以直接从 PL/SQL 过程打开外部站点)。还有其他方法可以直接提供 url 并将 get 参数作为请求 url 字符串的一部分传递,但这会暴露用户名、密码、序列号等敏感参数。
这个来自 PL/SQL 过程的 http 请求被我们的 Java Web 应用程序中的一个 servlet 截获。我们的 Java Web 应用程序是一个文档管理应用程序,它处理所有的文档管理逻辑。
我们设法访问了 servlet,还获得了 PDF 并将其放入响应中。
这里有一个问题:由于原始应用程序是一个 PL/SQL 过程,它将 HTTP 请求直接发送到我们的 Web 应用程序,因此在任何时候都不会打开浏览器窗口。因此,在我们的 Java servlet 类中,我们获取 PDF 并将其写入响应中。但是我们需要生成一个浏览器窗口来呈现 pdf。我发现this neat site 提供了Java 代码,可以直接从Java 类打开浏览器窗口。但问题是浏览器窗口直接在服务器而不是在客户端打开。这个浏览器窗口应该在我们的客户端机器上打开,而不是在服务器上发出 http 请求。
有什么建议吗?
干杯
【问题讨论】:
-
所以你的具体问题更多:“如何使用 PL/SQL 过程调用打开一个新的浏览器窗口?”。显然是客户直接调用的那个。
-
在我看来,您可能必须从另一端开始。打开网络浏览器,然后发送请求并等待来自服务器的响应(pdf)。您能否详细描述一下您是如何发送请求的?
-
我认为您不了解 HTTP 的请求/响应模型。 en.wikipedia.org/wiki/HTTP
-
@BalusC:实际上“我如何使用 PL/SQL 过程调用和 UTL_HTTP 包打开一个新的浏览器窗口”。可以通过其他包在新浏览器中简单地打开一个 url。就像我说的,虽然 UTL_HTTP 是唯一允许 POST 参数传递的。
-
您确实必须触发 HTTP 请求。让客户端调用 servlet。让 servlet 调用存储过程。让 servlet 返回它的结果。
标签: java servlets plsql pdf-generation