2011-11-25 76 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

相关问题