Coldfusion使用onRequestEnd()和Application.cfm文件

Coldfusion使用onRequestEnd()和Application.cfm文件,coldfusion,coldfusion-9,application.cfm,Coldfusion,Coldfusion 9,Application.cfm,我现在使用的是一个基于Application.cfm文件而不是Application.cfc文件的遗留应用程序 需要能够在处理请求后运行代码。(基本上,我希望使用标记将一些Javascript和CSS文件注入到每个加载的文档中。在我使用GreaseMonkey用户脚本进行此操作之前,最好使用服务器端的东西。) 从我所读到的内容来看,我认为我应该能够使用onRequestEnd()函数来实现这一点,但是,我只看到在Application.cfc文件中引用了该函数。我已经了解到,您可以将onRequ

我现在使用的是一个基于
Application.cfm
文件而不是
Application.cfc
文件的遗留应用程序

需要能够在处理请求后运行代码。(基本上,我希望使用
标记将一些Javascript和CSS文件注入到每个加载的文档中。在我使用GreaseMonkey用户脚本进行此操作之前,最好使用服务器端的东西。)

从我所读到的内容来看,我认为我应该能够使用
onRequestEnd()
函数来实现这一点,但是,我只看到在
Application.cfc
文件中引用了该函数。我已经了解到,您可以将
onRequestEnd.cfm
文件与
Application.cfm
文件放在同一目录中,让它注册到
onRequestEnd()
函数,但系统不会映射到一个
Application.cfm
文件(也就是说,我必须将这个
onRequestEnd.cfm
文件放到许多目录中)


是否有其他方法可以使用
应用程序.cfm
设置注册此
onRequestEnd()
函数?如果有问题,我们正在运行Coldfusion 9。

只是为了澄清一下,
onRequestEnd()
方法只有在使用
应用程序.cfc
文件时才可用

OnRequestEnd.cfm
文件确实与ColdFusion中的
Application.cfm
文件类似,ColdFusion会自动查找它并在找到它时处理它的内容。请注意,如果您的应用程序有Application.cfc文件,则不能使用OnRequestEnd.cfm页面。因此,假设您没有
应用程序.cfc
文件,并且仅使用
application.cfm
文件,那么
OnRequestEnd.cfm
文件应该适用于您。您只需将希望在页面请求后执行的CFML代码插入该文件

如果您有多个
Application.cfm
文件分布在不同的文件夹中,那么,是的,您还需要在这些目录中复制/创建
OnRequestEnd.cfm
文件。您可能能够在这些目录中复制存根
OnRequestEnd.cfm
文件,这些目录只做
cfinclude
您的actu所有代码都来自另一个单独的位置。至少这样,一旦你有了所有的存根文件,你就可以在一个地方修改代码了

请参阅的文档(它是为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文件,如果没有找到,则检查Application.cfm页面,直到它到达根目录(例如C:)。当它找到Application.cfc或Application.cfm文件时,将处理该页面并停止搜索
  • ColdFusion处理请求页面的内容
  • 请求结束时,ColdFusion执行以下操作:
    • 如果您有Application.cfc,ColdFusion将处理cfc的onRequestEnd方法并释放cfc实例
    • 如果您没有Application.cfc,但有Application.cfm页面,ColdFusion会在当前页面使用的Application.cfm页面所在的目录中查找OnRequestEnd.cfm。ColdFusion不会在该目录之外搜索,因此它不会运行驻留在另一个目录中的OnRequestEnd.cfm页面如果应用程序页上存在错误或异常,或者应用程序页执行cfabort或cfexit标记,则nRequestEnd.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标记。在这种情况下,具有相同名称的所有页面共享相同的应用程序设置和应用程序范围,并且可以设置和获取此范围内的所有变量。Cold