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

jzi*_*011 2 coldfusion coldfusion-9 application.cfm

我正在使用基于Application.cfm文件而不是Application.cfc文件构建的遗留应用程序.

在处理请求后,需要能够运行代码.(基本上,我想使用<cfhtmlhead>标记将一些Javascript和CSS文件注入到每个加载的文档中.在我使用GreaseMonkey用户脚本执行此操作之前,但服务器端的内容最好.)

从我读到的,我认为我应该能够使用该onRequestEnd()函数执行此操作,但是,我只见过有关Application.cfc文件的引用.我已经读过,您可以将onRequestEnd.cfm文件放在与文件相同的目录中,Application.cfm以便将其注册到onRequestEnd()函数中,但系统不会映射到一个Application.cfm文件(即我必须将此onRequestEnd.cfm文件放在很多目录中).

是否有其他方法可以onRequestEnd()使用Application.cfm设置注册此功能?如果重要,我们正在运行Coldfusion 9.

Mig*_*l-F 8

只是为了澄清,该onRequestEnd()方法仅在您使用该Application.cfc文件时可用.

OnRequestEnd.cfm文件确实像文件一样工作Application.cfm,因为ColdFusion会自动查找它,并在找到时处理它的内容.请注意,如果您的应用程序具有Application.cfc文件,则无法使用OnRequestEnd.cfm页面. 因此,假设Application.cfc您的应用程序没有文件,并且只使用Application.cfm文件,那么该OnRequestEnd.cfm文件应该适合您.您需要做的就是将页面请求后要执行的CFML代码插入到该文件中.

如果您有多个Application.cfm文件分布在各种文件夹中,那么,是的,您还需要复制/创建OnRequestEnd.cfm这些目录中的文件.您可以在这些目录中复制存根 OnRequestEnd.cfm文件,这些目录只能cfinclude从另一个单一位置复制您的实际代码.至少就是这样,一旦你拥有了所有的存根文件,你就可以在一个地方修改代码.

请参阅结构化应用程序的文档(它是为ColdFusion 8编写的,但仍然适用相同的规则).如果页面被删除,这里是相关文本:

ColdFusion如何查找和处理应用程序定义页面

ColdFusion使用以下规则来定位和处理定义特定于应用程序的元素的Application.cfc,Application.cfm和OnRequestEnd.cfm页面.ColdFusion定位这些文件的方式有助于确定如何构建应用程序.

每次ColdFusion处理页面请求时,它都会执行以下操作:

  1. 当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文件时,它会处理页面并停止搜索.
  2. ColdFusion处理请求页面的内容.
  3. 请求结束时,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.