我正在基于CF代码在生产服务器上使用Web应用程序,该CF代码使用并依赖于CF Administrator映射来定位CFC。我有这样的目录结构:
Webroot/
_TaskDir/
Application.cfm
myFile.cfm
CFC/
component1.cfc
...
app/
Application.cfm
index.cfm
...
我在CF Administrator中的映射类似于:
Logical Path: /myComponents
Directory Path: C:/Projects/Code/.../CFC/
大多数应用程序都位于应用程序目录下,并使用调用在各处创建对象,例如:
<cfset myCFCojb = CreateObject("component", "myComponents.component1").init()>
在网络根目录(_TaskDir
)的另一个文件夹中,有一些计划的任务类型脚本,它们以与其他所有地方相同的方式调用CreateObject
方法,使用点符号指定到文件的路径。组件映射目录。据称它在生产上运行良好,但是由于某种未知的原因,我发现它在我的开发环境中的此目录中不起作用。 CreateObject
在我的应用程序的其余部分都可以正常工作,但是当放入此文件夹中的脚本时,它将失败。
如果失败,我的意思是我遇到了NullPointerException
错误。如果我将点标记路径更改为物理路径(因为两个路径都在webroot内),例如CreateObject("component", "/CFC/component1").init()
,那就很好。只是在此目录中似乎忽略了点符号和映射。
这是因为此文件夹位于应用程序目录的外部,该目录具有主Application.cfm
,而_TaskDir
具有自己的Application.cfm
?我认为Mappings都可以。
stackTrace的第一部分是:
java.lang.NullPointerException在 coldfusion.util.Utils.getDirectoryFromPath(Utils.java:350)在 coldfusion.runtime.TemplateProxyFactory.getTemplateFileHelper(TemplateProxyFactory.java:1638) 在 coldfusion.cfc.ComponentProxyFactory.getProxy(ComponentProxyFactory.java:51) 在coldfusion.runtime.CFPage.CreateObject(CFPage.java:6354)在 coldfusion.runtime.CFPage.CreateObject(CFPage.java:6373)...
我正在Tomcat容器中使用CF2016。
答案 0 :(得分:1)
我发现了问题。发现我用作Apache服务器容器的Tomcat(8.5.20)版本现在区分大小写。我从_TaskDir目录运行了3个脚本,并使用错误的大小写(_Taskdir)指定了URL,前两个脚本运行良好。第三个是试图使用“管理员映射”运行CreateObject来查找CFC目录的计算机。该URL显然用于与Mappings路径进行比较。 URL中使用错误的大小写会影响CFC目录的点符号路径。至少我现在知道如何解决这个问题。
如果您可以进一步了解这种区分大小写的路径如何影响CF,我想了解更多。如果有关于此的文章,请分享。