如何在Coldfusion中使用Java文件

12

我需要将一个Java文件导入到ColdFusion 8页面中,例如:

public class Hello 
{ 
    public String testJava() 
    { 
    return "Hello Java!!"; 
    } 
}

在 Coldfusion 中,我有以下代码:

<cfscript>
   helloWorld = CreateObject("java","Hello");
   helloTest = helloWorld.testJava();
</cfscript>

我接着收到了以下错误:

对象实例化异常。找不到类: Hello

在我的 Coldfusion 服务器中,Java 虚拟机路径设置为 'C:/ColdFusion8/runtime/jre' ,所以我将我的 Java 文件放在这里,这样做正确吗?我应该放一个 .java、.class 还是 .jar 文件呢?

文件名需要与类名一致吗?

有没有人有类似的可用示例代码我可以尝试?

3个回答

13

你需要将文件放在ColdFusion JVM的类路径上,而不是其JRE目录中。

通常情况下,如果你有一个jar文件,请将它放在实例的WEB-INF/lib目录下,如果只是一个类,请将它放在WEB-INF/classes目录下,例如:对于我来说,后者会是C:\apps\adobe\ColdFusion\11\full\cfusion\wwwroot\WEB-INF\classes,其中C:\apps\adobe\ColdFusion\11\full\是我安装CF的位置,cfusion是实例的名称。


2
只是提醒一下,如果您升级到CF10或更高版本,您也可以使用this.javasettings指定一个文件夹供CF查找JAR。这会使事情变得更容易(通常情况下)。您还可以使用开源项目JavaLoader来完成相同的操作。不确定它是否适用于8,但我确信它适用于9。 - Raymond Camden

7
文件名需要与类名一致吗? 您是指.java文件的名称吗?是的,但这是Java的要求。如果您的类名为“Hello”,则源文件必须命名为“Hello.java”,否则它将无法编译。当您编译源代码时,Java编译器会生成一个名为“Hello.class”的文件。将该文件复制到 CF类路径中。惯例是将单个.class文件放在WEB-INF\classes中,将jar文件放在WEB-INF\lib中,正如Adam所提到的那样。请注意,您必须重新启动CF服务器才能检测到新的类

重新启动后,您将能够创建该类的实例。但是,请确保在createObject语句中使用正确的类名。它应该是“Hello”,而不是“Test”。此外,与CF中的大多数内容不同,类名区分大小写。

<cfscript>
    helloWorld = CreateObject("java","Hello");
    helloTest = helloWorld.testJava();
    WriteDump( helloTest );
</cfscript>


更新: 尽管如此,对于测试目的而言,使用单独的类文件是可以的。然而,通常情况下,您会将类打包成一个 .jar 文件。在 jar 文件中,文件名并不重要,只有类的内部路径才重要。如果您的类位于一个包中,您必须同时包含包名。例如,如果您的 Hello 类位于名为 com.utilities 的包中,完整路径将是:

 helloTest  = createObject("java", "com.utilities.Hello");

关于类路径,使用方式相同。只需将jar文件放置在CF类路径中,即WEB-INF\lib并重新启动。如Raymond在评论中提到的,对于CF10+,请参见在Application.cfc中指定自定义Java库路径而不进行动态加载

谢谢!如果我使用.jar文件,是否可以为jar使用任何名称? 如何在CF中引用它?: helloWorld = CreateObject(“java”,classname); helloWorld = CreateObject(“java”,jarname); helloWorld = CreateObject(“java”,jarname.classname); - Chimeara
啊,我认为应该是CreateObject("java",packagename.classname);。 - Chimeara

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接