我需要将一个java文件导入coldfusion 8页面,例如:
public class Hello
{
public String testJava()
{
return "Hello Java!!";
}
}
在Coldfusion中,我有以下代码:
<cfscript>
helloWorld = CreateObject("java","Hello");
helloTest = helloWorld.testJava();
</cfscript>
然后我收到错误
对象实例化异常。找不到课程:你好
在我的Coldfusion服务器中,Java虚拟机路径被设置为&#39; C:/ ColdFusion8 / runtime / jre&#39;,所以这就是我放置我的java文件的地方,这是正确的吗?我应该在那里放一个.java,.class或.jar吗?
文件名是否需要与班级名称一致?
有没有人有类似我可以尝试的类似代码?
答案 0 :(得分:12)
您需要将文件放在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
是实例的名称。
答案 1 :(得分:7)
文件名是否需要与班级名称一致?
你的意思是.java文件的名称?是的,但这是一个java要求。如果您的类名为“Hello”,那么您的源文件必须命名为“Hello.java”,否则将无法编译。编译源代码时,java编译器将生成一个名为“Hello.class”的文件。将该文件复制到CF class path。惯例是将单个.class文件放在WEB-INF\classes
内,将jar文件放在WEB-INF\lib
内,如Adam所述。 注意,您必须重新启动CF服务器才能检测新类
重新启动后,您将能够创建该类的实例。但是,请确保在createObject语句中使用正确的类名。它应该是“你好” - 而不是“测试”。此外,与CF中的大多数内容不同,类名是cAsE sEnSiTive。
<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 +,请参阅Specifying custom Java library path in the Application.cfc without dynamic loading。
答案 2 :(得分:0)
您真的应该考虑使用Mark Mandel的JavaLoader。 这将使您的生活更轻松:-) https://github.com/markmandel/JavaLoader