ColdFusion的可信缓存会影响哪些文件扩展名

时间:2011-11-25 13:02:03

标签: coldfusion coldfusion-9 cfimport

可信缓存缓存哪些文件扩展名? CFM和CFC是显而易见的,但CFR呢?是否有可信任缓存捕获的其他文件扩展名?

我知道/怀疑文件进入模板缓存的一些地方是:

  • 直接在网址中指定(cfmcfmlcfc,更多?)
  • cfinclude(cfinclude中使用的任何文件扩展名,例如<cfinclude template="./some.css">
  • cfmodule(cfm,更多?)
  • cfimport(cfm,还有jartld?)
  • cfobject,createobject(cfc,还.net,com,java和Web服务?)
  • cfreport(cfr哪些可以使用cfcompile实用程序?)

是否有其他标签会将内容添加到模板缓存中?

3 个答案:

答案 0 :(得分:7)

Adob​​e ColdFusion(和Railo)将CFML模板编译为JVM字节码,如果配置为这样,则将编译后的类作为.class文件写入磁盘。模板缓存是一种机制,用于说:如果已经加载了目标类,则不必费心查看磁盘上的(源)文件以查看是否需要重新编译 - 信任内存中的内容。

最近对ACF和Railo的增强允许您指定始终(不受信任)检查(源)文件,每个请求一次,永远不会(始终信任)。

这对任何人都不应该是新闻。

显然,ACF和Railo会编译他们被要求处理的任何.cfm或.cfc文件,这样如果启用它们,它们将在可信任缓存中“结束”。

如果你包含一个文件 - 任何文件 - ACF和Railo也会将其编译为JVM字节码(如果配置为这样,则在磁盘上创建一个.class文件)。由于编译了一个包含的文件,它也将在可信缓存中“结束”。如果你包含一个CSS文件会发生什么?它被编译为字节码,它将CSS文件的整个内容作为字符串输出到响应流。由于它是一个编译类,现在输出一个硬编码字符串,如果你改变CSS源文件并启用了可信任缓存,ACF和Railo将信任类加载器中的内容而不是重新编译它(假设“从不”检查源是管理员设置)。

您可以通过清除cfclasses文件夹,重新启动CFML引擎并运行代码来验证这一点。您将看到CSS文件出现.class文件(假设您已将类文件保存到磁盘)。

因此,cfinclude强制编译“any”文件,并且可信缓存的常规规则适用于加载到内存中的类。

我不再使用ACF,因此我无法详细说明.cfr文件(Railo不支持报告文件),但很可能取决于ACF是否编译.cfr文件。它应该很容易验证(通过查看cfclasses文件夹)。

答案 1 :(得分:5)

默认情况下,ColdFusion附带在JRun中映射的* .cfm,* .cfc和* .cfml扩展名作为受信任的扩展名。您可以通过打开\ 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服务器进行一些额外配置,无论是Apache,IIS还是其他任何配置。

一旦CF配置为处理特定扩展名的文件,它就会被添加到在可信任缓存中处理的文件列表中 - 因为该文件最终等同于一个已编译的.class文件。

答案 2 :(得分:0)

不幸的是,这些信息没有官方消息来源。但是,通过大量工作,可以测试每个标记,以查看文件是否最终存在于可信缓存中。

前两个要点分别由Shawn Holmes' answerSean Corfield's answer涵盖。

子弹3:cfmodule仅限于cfm文件,因此扩展是您唯一需要担心的扩展名。

Bullet 6:cfreport不应该进入模板缓存,因为它正在转换文件,而不是编译它以便执行代码。