FoxWeb 的更新(机器翻译加手工修改,节选)
从版本1升级从版本2开始,FoxWeb引入了许多新特性,这些特性彻底改变了FoxWeb应用程序的编写方式。尽管这些特性使创建功能强大的站点变得更加容易,但新的编程界面一开始对长期用户来说可能有些不知所措。此外,一些开发人员将不想花费时间和精力来升级他们现有的脚本,以利用FoxWeb的新对象。为了满足每个人的需求,FoxWeb4维护了与FoxWeb1API的兼容性。只要启用了1.x兼容性配置选项,为以前版本编写的应用程序就会运行而不进行任何修改。这样的应用程序仍然可以利用FoxWeb4大大改进的可伸缩性和管理特性。
即使您仍然可以使用旧的API编写应用程序,但最终您将总是希望开始利用新对象,这使得读取用户输入、创建输出、维护会话信息和添加身份验证变得更加容易。您还将希望充分利用新的FWX脚本特性。本主题的其余部分分为由FoxWeb脚本执行的各种任务,并列出了执行这些任务的旧方法与新方法的比较。
处理用户输入
CGI和isapi请求伴随着两种类型的信息:Server variables(服务器变量)和POST字段。服务器变量是一个值的集合,它提供了HTTP报头中包含的信息,如Cookie信息和查询字符串。POST字段是用户作为HTML表单的一部分提交的值。FoxWeb1将各种服务器变量公开为CGI对象的属性。另一方面,表单字段是通过Formfield和TotFields函数以及CgiFields数组访问的。
FoxWeb4将所有这些API元素合并到request对象下。这个对象不仅提供了上述元素以前所涵盖的所有功能,而且还使解码某些复合变量变得更加容易,比如Cookie Server Variable(服务器变量)和Query String(查询字符串)。ServerVariables、ServerVariablescount和ServerVariablesArray方法替换CGI对象。Form、FormCount和FormArray方法分别是Formfield、TotFields和CgiFields元素的替代品。
此外,Request对象还包括GetCookie、CookieCount和CookieArray方法,它们使读取特定的Cookie更容易,以及 QueryString, QueryStringCount and QueryStringArray方法,它们有助于解码特定的查询字符串字段。
返回内容到浏览器
FoxWeb1脚本通过将输出内容存储在html_out变量中,从而将输出内容返回给浏览器。HTTP报头,如Content Typpe、Cookie和 redirection directives(重定向指令),必须与其他内容一起手动存储在html_out中。MergeTxt函数通过提供一个文本合并函数,使返回HTML内容变得更容易,但它有些有限,因为它只支持VFP表达式。不允许使用常规命令,如条件语句或FOR/NEXT、DO/while和SCAN/encscan循环。
FoxWeb4取消了html_out变量,而是为更强大的基础设施提供内容返回浏览器。新的FWX脚本功能取代了MergeTxt,并允许混合FoxWeb脚本代码和HTML内容。此外,Response对象使HTTP头的构造更加容易,使用Redirect、SetCookie、DelCookie和AddHeader方法,以及CacheControl、Charset、ContentType、Expires和ExpriesAbsolute属性。
URL构造
FoxWeb的以前版本鼓励在FoxWeb生成的输出中包含的链接中使用绝对的url,无论它们是指向其他的FoxWeb脚本还是静态文件。FoxWeb1中包含的联系人网络的版本甚至使用了一个名为MakeURL的函数来构建这样的链接。尽管绝对链接在FoxWeb4中工作良好,但我们不再推荐它们,因为它们使创建可移植代码变得困难。您应该使用在FoxWeb脚本输出中包含链接的主题中描述的技术。
出于安全原因,FoxWeb4不支持在URL中使用UNC路径,并要求您在URL中启用完整路径设置,以便甚至允许您直接引用FoxWeb程序根目录及其子目录之外的脚本。建议您保持禁用此选项。如果要在单独的位置(本地或远程)上调用脚本,则可以通过修改Request.Pathinfo属性的值来实现。。
保护脚本
FoxWeb1包含了外部程序passcook.prg,作为密码保护脚本的一种手段。FoxWeb4通过Auth对象提供本地保护。这个对象具有与passcook.prg类似的功能,但它更容易使用,更好地与FoxWeb集成,并且具有更多的功能。
其他功能
为了ASP兼容性,UrlEncode函数已替换为Server.UrlEncode方法。此外,VFP的后期版本提供了Filetostr和StrtoFile函数,因此不再需要ReadFile和WriteFile函数。
重定向在fw_enter.prg
不再支持通过更改CGI.LogicalPath的值来重定向传入的请求,而使用request.PathInfo属性替代。
(未完待续。。。)