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

问题描述 投票:6回答:3

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

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

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

是否有其他标签与将内容添加到模板缓存中具有相同的效果?

coldfusion coldfusion-9 cfimport
3个回答
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文件夹)。


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标记(我已经使用已配置为解析.shtml的CF服务器,例如)

注意:您还需要为Web服务器进行一些额外配置,无论是Apache,IIS还是其他任何配置。

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


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.