2011-11-25 36 views
6

哪些文件擴展名由Trusted Cache緩存? CFM和CFC是顯而易見的,但CFR呢?受信任的緩存是否還有其他文件擴展名?哪些文件擴展名受到ColdFusion的信任緩存器影響

我知道有些地方/可疑的文件輸入模板緩存是:

  • 在URL中直接指定(cfmcfmlcfc,更多?)
  • cfinclude(任何文件擴展名時使用在cfinclude如<cfinclude template="./some.css">
  • cfmodule(cfm,更多?)
  • cfimport(cfm,也jartld?)
  • cfobject,CREATEOBJECT(cfc,也.NET,COM,Java和Web服務?)
  • cfreport(cfr可與cfcompile效用得到遵守?)

還有沒有其他的標籤這會將內容添加到模板緩存中具有相同的效果?

回答

0

很抱歉,還沒有這個信息的官方消息。但是,通過大量工作,可能會測試每個標記以查看文件是否在可信緩存中結束。

您的前兩個要點分別覆蓋Shawn Holmes' answerSean Corfield's answer

子彈3:cfmodule限於cfm文件,所以擴展是唯一一個你必須擔心的地方。

Bullet 6:cfreport不應該輸入模板緩存,因爲它正在轉換文件,而不是編譯它來執行代碼。

5

默認情況下,ColdFusion的附帶* .CFM,* .cfc和* .cfml擴展中的JRun映射爲受信任的擴展。您可以通過打開\ JRun4 \ servers \ cfusion \ cfusion-ear \ cfusion-war \ WEB-INF \中的j2ee-web.xml和web.xml配置文件來查看這些映射(或者基於您的安裝,在此附近) :

<servlet-mapping id="coldfusion_mapping_3"> 
    <servlet-name>CfmServlet</servlet-name> 
    <url-pattern>*.cfm</url-pattern> 
</servlet-mapping> 
<servlet-mapping id="coldfusion_mapping_4"> 
    <servlet-name>CFCServlet</servlet-name> 
    <url-pattern>*.cfc</url-pattern> 
</servlet-mapping> 
<servlet-mapping id="coldfusion_mapping_5"> 
    <servlet-name>CfmServlet</servlet-name> 
    <url-pattern>*.cfml</url-pattern> 
</servlet-mapping> 

但是,您也可以手動配置全新的映射,在這裏爲好,這將允許ColdFusion的解析/編譯文件CFML標籤擴展名不同,以及(我已經與CF服務器是工作已配置的.shtml解析,例如)

注意:您還必須做一些額外的配置你的Web服務器,無論是阿帕奇,IIS,或什麼的。

一旦CF配置爲處理特定擴展名的文件,它將被添加到在Trusted Cache中處理的文件列表中 - 因爲該文件最終等同於編譯後的.class文件。

+0

我添加了另一個我發現內容可以進入模板緩存的案例。你有進一步的見解嗎? – nosilleg

+0

補充說明。 –

+0

您提供的鏈接是正在緩存的應用程序級對象的示例,同時繼續動態執行其方法/僞構造函數的主體,而該構造函數是CFINCLUDE。這與我上面的*情況B *類似。該對象和方法被緩存,但該方法在調用時產生的不是。這與可信緩存無關,這是一個完全獨立的過程,CF用於檢查/忽略CF模板以進行修改/重新編譯。 –

7

Adob​​e ColdFusion,請(和Railo)編譯CFML模板JVM字節碼,如果配置的話,會寫編譯的類(ES)到磁盤的.class文件。模板緩存是一種說法:如果目標類已經被加載,不要打擾磁盤上的(源)文件以查看它是否需要重新編譯 - 相信內存中的內容。

最新增強功能ACF和Railo允許您指定(源)文件可以隨時檢查(不信任),每一次請求,從不(永遠值得信賴的)。

這不應該是任何人的消息。

顯然ACF和Railo將編譯他們被要求處理所以那些如果啓用了在可信的緩存將「最終」任何.CFM或.cfc文件。

如果你cfinclude一個文件 - 任何文件--ACF和Railo也將它編譯成JVM字節碼(並且如果配置爲在磁盤上創建一個.class文件)。由於包含的文件被編譯,它也會在可信緩存中「結束」。如果你包含一個CSS文件,會發生什麼?它被編譯爲字節碼,將CSS文件的全部內容作爲字符串輸出到響應流中。因爲它是一個編譯類,所以現在輸出一個硬編碼的字符串,如果你改變了CSS源文件並啓用了信任緩存,ACF和Railo將相信類裝載器中的內容,而不是重新編譯它(假設「永不」檢查源是管理員設置)。

您可以通過清除cfclasses文件夾,重新啓動CFML引擎並運行代碼來驗證。您會看到一個.class文件出現在您的CSS文件中(假設您已將類文件保存到磁盤啓用)。

因此,cfinclude強制編譯「任何」文件,並將可信緩存的正常規則應用於加載到內存中的類。

我不再使用ACF,所以我不能詳細講解.cfr文件(Railo不支持報告文件),但它很可能取決於ACF是否編譯.cfr文件。應該很容易驗證(通過查看cfclasses文件夾)。

+0

謝謝! +1爲缺少的鏈接,我刪除了我的答案。 –

+0

這一切都是有道理的,並且與在網絡上其他地方找到的數據相關聯,但我無法找到的是有關可以進入模板緩存的詳細信息以及如何進行操作。我認識/懷疑模板輸入的其他一些領域是:根據@ShawnHolmes原始答案,cfinclude,cfmodule,cfimport('jar','tld's以及'cfm's?)直接從webserver加載,cfobject ('cfc's,但.net,com,java和web服務?),createobject,cfreport('cfr'可以與cfcompile實用程序兼容),其他?另外,我不認爲ACF總是寫入.class文件。冉測試,只有一個.class而不是4. – nosilleg

+0

@ShawnHolmes羞愧你刪除了你答案的原始部分,我認爲這是對這個問題的答案非常有價值的一部分。 – nosilleg

相關問題