2013-03-15 79 views
2

我正在使用Application.cfm文件而不是Application.cfc文件構建的舊版應用程序中工作。使用onRequestEnd()和Application.cfm文件的Coldfusion

需要能夠在請求處理後運行代碼。 (基本上,我想用<cfhtmlhead>標籤爲每個加載的文檔注入一些Javascript和CSS文件。在我使用GreaseMonkey用戶腳本進行此操作之前,服務器端將是最好的。)

從什麼我讀過,我想我應該可以用onRequestEnd()函數來做到這一點,但是,我只見過有關Application.cfc文件的引用。我已經讀過,你可以把一個onRequestEnd.cfm文件放在與Application.cfm文件相同的目錄中,讓它將它註冊到onRequestEnd()函數,但系統不會映射到一個Application.cfm文件(也就是說,我必須把這個onRequestEnd.cfm文件放在很多目錄)。

是否有其他方式註冊此onRequestEnd()函數使用Application.cfm設置?如果有問題,我們正在運行Coldfusion 9.

+0

只是要注意,這是不是真的一個 「生產」 級功能。它將在我們的生產服務器上運行,但這是我們將用來幫助將客戶升級到最新版本的轉換實用程序所需的。 – jzimmerman2011 2013-03-15 15:28:50

回答

8

只是爲了澄清,只有在使用Application.cfc文件時,onRequestEnd()方法纔可用。

OnRequestEnd.cfm文件的確如同Application.cfm文件一樣工作,因爲ColdFusion會自動查找它並在找到它時處理它的內容。請注意0​​如果您的應用程序具有Application.cfc文件,則無法使用OnRequestEnd.cfm頁面。因此,假設您的應用程序沒有Application.cfc文件,並且只使用Application.cfm文件,那麼OnRequestEnd.cfm文件應該適合您。你所需要做的就是將你希望在頁面請求後執行的CFML代碼插入到該文件中。

如果在多個文件夾中分佈有多個Application.cfm文件,那麼您也需要在這些目錄中複製/創建OnRequestEnd.cfm文件。您可以將存根OnRequestEnd.cfm文件複製到那些不會超過cfinclude您的實際代碼的目錄中。至少這樣,一旦你有所有的存根文件,你可以在一個地方修改代碼。

請參閱Structuring an application的文檔(它是爲ColdFusion 8編寫的,但仍然適用相同的規則)。在情況下頁面被取下來,這裏是相關的文字:

的ColdFusion如何認定和處理應用程序定義頁面

的ColdFusion使用以下規則來定位和處理的Application.cfc,應用。 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用大寫字母。

0
相關問題