我正在使用基于Application.cfm
文件而不是Application.cfc
文件构建的遗留应用程序。
需要能够在处理请求后运行代码。 (基本上,我想使用<cfhtmlhead>
标签将一些Javascript和CSS文件注入到每个加载的文档中。在我使用GreaseMonkey用户脚本执行此操作之前,但服务器端的内容最好。)
从我读到的内容来看,我认为我应该可以使用onRequestEnd()
函数执行此操作,但是,我只见过Application.cfc
文件引用的内容。我已经读过您可以将onRequestEnd.cfm
文件放在与Application.cfm
文件相同的目录中,以便将其注册到onRequestEnd()
函数,但系统不映射到Application.cfm
onRequestEnd.cfm
1}}文件(即我必须将这个onRequestEnd()
文件放在很多目录中。)
是否有其他方法可以使用Application.cfm
设置注册此{{1}}功能?如果重要,我们正在运行Coldfusion 9。
答案 0 :(得分:8)
只是澄清一下,onRequestEnd()
方法仅在您使用Application.cfc
文件时才可用。
OnRequestEnd.cfm
文件确实像Application.cfm
文件一样工作,因为ColdFusion会自动查找它,并在找到时处理它的内容。请注意,如果您的应用程序有Application.cfc文件,则您无法使用OnRequestEnd.cfm页面。因此,假设您的应用程序没有Application.cfc
个文件且仅使用{ {1}}文件然后Application.cfm
文件应该适合您。您需要做的就是将页面请求后要执行的CFML代码插入到该文件中。
如果您在各种文件夹中分布了多个OnRequestEnd.cfm
个文件,那么,是的,您还需要在这些目录中复制/创建Application.cfm
个文件。您可以将这些目录中的存根 OnRequestEnd.cfm
文件复制到另一个单一位置的OnRequestEnd.cfm
实际代码中。至少就是这样,一旦你拥有了所有存根文件,就可以在一个地方修改代码。
请参阅Structuring an application的文档(它是为ColdFusion 8编写的,但仍然适用相同的规则)。如果该页面被删除,这里是相关文本:
ColdFusion如何查找和处理应用程序定义页面
ColdFusion使用以下规则来定位和处理定义特定于应用程序的元素的Application.cfc,Application.cfm和OnRequestEnd.cfm页面。 ColdFusion查找这些文件的方式有助于确定应用程序的结构。
每次ColdFusion处理页面请求时,它都会执行以下操作:
当ColdFusion开始处理请求时,它会执行以下操作:
- 在页面的目录中搜索名为Application.cfc的文件。如果存在,则创建CFC的新实例,处理初始事件并停止搜索。 (ColdFusion创建CFC的新实例并为每个请求处理其初始化代码。)
- 如果请求的页面目录没有Application.cfc文件,它会检查目录中的Application.cfm文件。如果存在,ColdFusion逻辑上在请求页面的开头包含Application.cfm页面并停止进一步搜索。
- 如果请求的页面目录没有Application.cfc或Application.cfm文件,ColdFusion将搜索目录树并首先检查每个目录中的Application.cfc文件,如果找不到,则检查应用程序。 .cfm页面,直到它到达根目录(例如C :)。当它找到Application.cfc或Application.cfm文件时,它会处理页面并停止搜索。
- ColdFusion处理请求页面的内容。
- 当请求结束时,ColdFusion会执行以下操作:
醇>
- 如果您有Application.cfc,ColdFusion将处理CFC的onRequestEnd方法并释放CFC实例。
- 如果您没有Application.cfc,但确实有Application.cfm页面,ColdFusion会在与ColdFusion用于当前页面的Application.cfm页面相同的目录中查找OnRequestEnd.cfm。 ColdFusion不会搜索该目录,因此它不会运行驻留在另一个目录中的OnRequestEnd.cfm页面。此外,如果应用程序页面上存在错误或异常,或者应用程序页面执行cfabort或cfexit标记,则OnRequestEnd.cfm页面不会运行。
以下规则确定ColdFusion如何处理应用程序页面和设置:
- ColdFusion仅为每个请求处理一个Application.cfc或Application.cfm页面。如果ColdFusion页面具有指向其他ColdFusion页面的cfinclude标记,则ColdFusion在包含其他页面时不会搜索Application.cfc或Application.cfm页面。
- 如果ColdFusion页面有cfapplication标记,它首先处理任何Application.cfc或Application.cfm,然后处理cfapplication标记。标记可以覆盖应用程序文件中的设置,包括应用程序名称和cfapplication标记属性设置的行为。
- 您可以拥有多个使用相同应用程序名称的Application.cfc文件,Application.cfm文件和cfapplication标记。在这种情况下,具有相同名称的所有页面共享相同的应用程序设置和应用程序范围,并可以设置和获取此范围内的所有变量。如果文件之间的设置(例如会话超时)不同,ColdFusion将使用cfapplication标记或最近处理的文件的参数设置。
注意:如果您的应用程序在区分大小写的UNIX平台上运行,则必须使用大写字母拼写Application.cfc,Application.cfm和OnRequestEnd.cfm。
答案 1 :(得分:0)
由于您使用的是ColdFusion 9,因此升级到使用Application.cfc而不是试图找出如何插入OnRequestEnd.cfm文件将是相当简单的。另外,将Application.cfc用于Application.cfm还有一些优点。
一些参考文献:
http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=appFramework_15.html
http://forum.hostek.com/showthread.php?724-Converting-to-Application-cfc
http://www.bennadel.com/blog/726-ColdFusion-Application-cfc-Tutorial-And-Application-cfc-Reference.htm
http://www.raymondcamden.com/index.cfm/2009/12/30/Best-of-CF9-Applicationcfc-Script-Template
http://cfruss.blogspot.com/2009/11/applicationcfc-reference-in-cfscript.html