可信缓存缓存哪些文件扩展名? CFM和CFC是显而易见的,但CFR呢?是否有可信任缓存捕获的其他文件扩展名?
我知道/怀疑文件进入模板缓存的一些地方是:
cfm
,cfml
,cfc
,更多?)<cfinclude template="./some.css">
)cfm
,更多?)cfm
,还有jar
和tld
?)cfc
,还.net,com,java和Web服务?)cfr
哪些可以使用cfcompile实用程序?)是否有其他标签会将内容添加到模板缓存中?
答案 0 :(得分:7)
Adobe 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' answer和Sean Corfield's answer涵盖。
子弹3:cfmodule仅限于cfm文件,因此扩展是您唯一需要担心的扩展名。
Bullet 6:cfreport不应该进入模板缓存,因为它正在转换文件,而不是编译它以便执行代码。