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

时间:2013-03-15 15:20:02

标签: 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 1}}文件(即我必须将这个onRequestEnd()文件放在很多目录中。)

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

2 个答案:

答案 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处理页面请求时,它都会执行以下操作:

     
      
  1. 当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文件时,它会处理页面并停止搜索。
    •   
  2.   
  3. ColdFusion处理请求页面的内容。
  4.   
  5. 当请求结束时,ColdFusion会执行以下操作:   
        
    • 如果您有Application.cfc,ColdFusion将处理CFC的onRequestEnd方法并释放CFC实例。
    •   
    • 如果您没有Application.cfc,但确实有Application.cfm页面,ColdFusion会在与ColdFusion用于当前页面的Application.cfm页面相同的目录中查找OnRequestEnd.cfm。 ColdFusion不会搜索该目录,因此它不会运行驻留在另一个目录中的OnRequestEnd.cfm页面。此外,如果应用程序页面上存在错误或异常,或者应用程序页面执行cfabort或cfexit标记,则OnRequestEnd.cfm页面不会运行。
    •   
  6.         

    以下规则确定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)