我如何从asp调用java?

时间:2009-01-08 23:31:13

标签: java asp-classic vbscript

我不熟悉ASP,但我正在帮助某人将他们的网站作为一个辅助项目。我试图使用VB从ASP调用Apache FOP(一个Java应用程序)。我看过使用GetObject('java:...')构造的简单示例,但我不知道如何从java对象传递和检索二进制数据。

理想情况下,我会在内存中执行此操作 - 我宁愿不必将数据写入磁盘,在该文件上调用FOP(将读取,然后写入新文件),然后重新读取磁盘上的数据。该网站不是 忙,所以我可以做到这一点,但它似乎效率不高。

3 个答案:

答案 0 :(得分:1)

在观察到问题并且测量结果告诉我FOP解决方案是罪魁祸首之前,我不担心效率。

我建议对Web服务进行异步调用。发送包含XML输入流和XSL-T样式表的消息。让服务将PDF写入其本地磁盘。向您的UI添加邮箱,以便在准备好接收PDF时提醒用户。单击该链接,PDF将流式传输到浏览器。用户可以根据需要查看或保存到本地磁盘。

Asynch在这种情况下很好,因为您不知道转换可能需要多长时间。为什么让用户等待?让他们稍后再回来查看。用于检查新PDF的AJAX调用将非常优雅。

答案 1 :(得分:0)

我想出了一个解决方法。这适用于在Win 2k3服务器上运行的IIS - 旧版本将更容易。

首先,我在主站点之外创建了一个子目录(出于安全目的),并将一个新的应用程序池附加到该目录。新应用程序池需要作为本地系统运行。我无法让fop.bat工作,甚至可以作为本地系统运行,但我可以调用java,所以我把整个fop命令行放到我的asp脚本中,类似于这个片段:

Dim shell, foppath, workpath
Set shell = Server.CreateObject("WScript.Shell")

foppath = Server.MapPath("/fop/")
workpath = Server.MapPath("/tmp/")
shell.CurrentDirectory = foppath

Dim commandline
commandline = "java -Denv.windir=C:\WINDOWS   -cp """
'set classpath
commandline = commandline & foppath & "\build\fop.jar;"
commandline = commandline & foppath & "\build\fop-sandbox.jar;"
commandline = commandline & foppath & "\build\fop-hyph.jar;"
commandline = commandline & foppath & "\lib\xml-apis-1.3.04.jar;"
commandline = commandline & foppath & "\lib\xml-apis-ext-1.3.04.jar;"
commandline = commandline & foppath & "\lib\xercesImpl-2.7.1.jar;"
commandline = commandline & foppath & "\lib\xalan-2.7.0.jar;"
commandline = commandline & foppath & "\lib\serializer-2.7.0.jar;"
commandline = commandline & foppath & "\lib\batik-all-1.7.jar;"
commandline = commandline & foppath & "\lib\xmlgraphics-commons-1.3.1.jar;"
commandline = commandline & foppath & "\lib\avalon-framework-4.2.0.jar;"
commandline = commandline & foppath & "\lib\commons-io-1.3.1.jar;"
commandline = commandline & foppath & "\lib\commons-logging-1.0.4.jar;"
commandline = commandline & foppath & "\lib\jai_imageio.jar;"
commandline = commandline & foppath & "\lib\fop-hyph.jar;"
commandline = commandline & """ org.apache.fop.cli.Main "
commandline = commandline & workpath & "/file.fo "
commandline = commandline & workpath & "/file.pdf "

Dim ResultCode
ResultCode = Shell.Run(commandline,,True) ' True = Wait for FOP to finish

之后,我确保清理我的临时文件等。也许不是最优雅的解决方案,但考虑到需要,我相信它会工作很长时间。

答案 2 :(得分:0)

如何添加配置文件-c conf \ fop.xconf或-c C:\ fop \ conf \ fop.xconf 以上优秀作品

TA!