ColdFusion Application.cfc - 执行顺序

jpm*_*yob 8 coldfusion application.cfc

我需要一个现实检查 - 并希望解释(如果我的现实是错误的).

CF应用程序框架评估事物的方式是这个(我的理解) - 请求被传递给cfserver

  • cf找到application.cfm或cfc(基于遍历规则)

  • application.cfc执行(如果找到)

  • 设置了范围(可以在此处设置一系列特定于应用程序的变量

一些是必需的 - 例如"applicationTimeout" - 然后发生一系列事件 - 如果需要则触发方法.

- onApplicationStart()

---- onSessionStart()

------ onRequestStart()

等等

所以我的问题

1)这个设置发生在每个页面请求上 - 之前还有什么?

2)如果我在onApplicationStart()中设置一个应用程序变量 - 它可以在之后发生的任何进程中使用 - 并且应该在内存中持续applicationTimeout()的长度 - 正确吗?

3)所以,如果我做这样的事......

if(isdefined("application.myvar"){this.something = application.myvar;}

它应该在启动应用程序范围的初始请求之后处理任何页面请求.

但它似乎没有这样做.

我的理由是这个 - 有一些有趣的应用程序杠杆设置需要在这个范围内设置......其中一些可能是"密集的"(至少形成执行每个请求的视角 - 所以我想要只做ONCE,在持久性mem中设置一个结构,然后将它们作为这个可用.

我做了一些错误的假设吗?

谢谢

Adr*_*eno -1

Application.cfc 文件内范围内的任何内容都会成为应用程序变量,并且每个应用程序生命周期仅创建一次。应用程序启动后,Application.cfc 中没有其他用户

第一次运行 CF 应用程序时,onApplicationStart() 的内容会在 onRequest/Start/End 之前运行(“CF10 中的新功能”onServerStart() 除外)。

在应用程序中任何位置设置的任何应用程序变量都将一直存在,直到应用程序停止为止。

#3 中的代码应该是

if ( !structKeyExists( application, "myvar" ) { application.myvar = foo; }

然后在需要的地方引用 application.myvar 。

根据您的描述,不需要向此范围添加任何内容,只需将其放入应用程序范围即可。

  • 感谢 KunFoo 的尝试 - 实际上我不是在抨击 - 但每次发出请求时都会执行 - 来说明。在应用程序中将“this.name”设置为 createUUID 或 getTickCount()。然后将其转储到屏幕上,点击刷新,您将看到每个请求在此范围内都是唯一的。这些设置必须存在,以便有一个“应用程序”的构造在 onApplicationStart() 中初始化...[我知道有人会提出 structkeyexists...这不是问题的一部分,我使用该语法简洁..但是谢谢。] (4认同)