你如何在Coldfusion中使用java文件

Chi*_*ara 11 java import coldfusion coldfusion-8

我需要将一个java文件导入coldfusion 8页面,例如:

public class Hello 
{ 
    public String testJava() 
    { 
    return "Hello Java!!"; 
    } 
}
Run Code Online (Sandbox Code Playgroud)

在Coldfusion中,我有以下代码:

<cfscript>
   helloWorld = CreateObject("java","Hello");
   helloTest = helloWorld.testJava();
</cfscript>
Run Code Online (Sandbox Code Playgroud)

然后我收到错误

对象实例化异常.找不到类:你好

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

文件名是否需要与类名一致?

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

Ada*_*ron 12

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

通常,如果你有一个jar文件,把它放在实例的WEB-INF/lib目录中,如果它只是一个类,把它放在WEB-INF/classesdir中,例如:对我来说后者将是,我C:\apps\adobe\ColdFusion\11\full\cfusion\wwwroot\WEB-INF\classesC:\apps\adobe\ColdFusion\11\full\哪里安装CF,并且cfusion是名字实例.

  • 仅作为FYI,如果您升级到CF10或更高版本,您还可以使用this.javasettings为CF指定一个文件夹来查找JAR.使它更容易(通常).您还可以使用开源项目JavaLoader来执行相同的操作.不知道它是否适用于8,但我确信它在9中有效. (2认同)

Lei*_*igh 7

文件名是否需要与类名一致?

你的意思是.java文件的名字?是的,但这是一个java要求.如果您的类名为"Hello",那么您的源文件必须命名为"Hello.java",否则将无法编译.编译源代码时,java编译器将生成一个名为"Hello.class"的文件.将该文件复制到CF类路径中.惯例是将单个.class文件放在里面WEB-INF\classes,将jar文件放在里面WEB-INF\lib,就像亚当提到的那样.注意,您必须重新启动CF服务器才能检测到新类

重新启动后,您将能够创建该类的实例.但是,请确保在createObject语句中使用正确的类名.它应该是"你好" - 而不是"测试".此外,与CF中的大多数内容不同,类名是cAsE sEnSiTive.

<cfscript>
    helloWorld = CreateObject("java","Hello");
    helloTest = helloWorld.testJava();
    WriteDump( helloTest );
</cfscript>
Run Code Online (Sandbox Code Playgroud)


更新: 也就是说,使用单个类文件可以用于测试目的.但是,您通常会将类打包到.jar文件中.对于jar文件,文件名无关紧要.只有课程的内部路径才有意义.如果您的类位于包中,则还必须包含包名.例如,如果您的Hello类位于名为的包中com.utilities,则完整路径为:

 helloTest  = createObject("java", "com.utilities.Hello");
Run Code Online (Sandbox Code Playgroud)

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