我正在使用 Delphi XE2 Rest/JSON Server 和 jQTouch 客户端实现一个应用程序。我已经基本完成了服务器端,现在正在转向客户端开发。
我已经下载了 jQTouch 源代码,并在我的 PC 的 8081 端口上的 IIS 下设置了它。这工作正常。
但我需要通过 Delphi WebFileDispatcher 访问静态演示源。这就是我有问题的地方......
作为一个精简的测试/证明,我使用 Web Broker / Web Server Application / Standalone VCL 向导进行了设置,并将 WebFileDispatcher 拖放到 Web 模块上。唯一的配置是配置 WebFileDispatcher 的“根”以获取内容。
这是以最简单的形式重现的问题:
我可以通过端口 8081 上的 IIS 访问内容。
我可以通过端口 8080 上的 Web Broker 访问内容。
两者都使用完全相同的 localhost URL,只是端口不同。
所以我知道我的路径和基本配置是正确的。
但是......当内容从 Web Broker 上服务器时,jQTouch 菜单项上的“大于”或“右箭头”显示为带有抑扬符的“a”。绿色的外部链接箭头出现,上面带有欧元符号。
当服务器从 IIS 启动时,内容显示没有任何问题。
问题似乎是 IdHTTPHeaderInfo 单元中的代码附加到内容类型的字符集。当 html 和 css 文件为 UTF-8 时,本单元添加 'charset=8859-1'。
我可以通过将 WebFileDispatcher 的 WebFileExtensions 属性中定义的 MimeTypes 更改为包含 charset=UTF-8 来解决此问题。即将“text/html”的条目更改为“text/html”;字符集=UTF-8'。
但这应该是必需的吗?我不这么认为。我认为:A)如果 Delphi 包含一个为这些文件提供服务的 Web 服务器,并且它的默认设置是假设所有文本文件都是 8859-1,那么应该设置 Web 调度程序的 mime 类型以将其覆盖为正确的值UTF-8 的。B)或者应该检查文件的头部元标记,以便在响应中报告实际编码。目前,这两种情况似乎都不是。
其他人会将此归类为需要报告的错误吗?花了两天时间才把问题缩小到这一步,而且我不希望其他人将来不得不这样做。
要重现,只需下载最新的 jQTouch 版本并将内容映射到 WebFileDispatcher。
这是显示问题的两张图片:
![在此处输入图像描述][2]
此外,以下是与 Web 模块配置相关的 Delphi 文件。
这是PAS文件...
unit WebModuleUnit1;
interface
uses System.SysUtils, System.Classes, Web.HTTPApp;
type
TWebModule1 = class(TWebModule)
WebFileDispatcher1: TWebFileDispatcher;
procedure WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
WebModuleClass: TComponentClass = TWebModule1;
implementation
{$R *.dfm}
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.Content := '<html><heading/><body>Web Server Application</body></html>';
end;
end.
这是dfm...
object WebModule1: TWebModule1
OldCreateOrder = False
Actions = <
item
Default = True
Name = 'DefaultHandler'
PathInfo = '/'
OnAction = WebModule1DefaultHandlerAction
end>
Height = 230
Width = 415
object WebFileDispatcher1: TWebFileDispatcher
WebFileExtensions = <
item
MimeType = 'text/css'
Extensions = 'css'
end
item
MimeType = 'text/html'
Extensions = 'html;htm'
end
item
MimeType = 'text/javascript'
Extensions = 'js'
end
item
MimeType = 'image/jpeg'
Extensions = 'jpeg;jpg'
end
item
MimeType = 'image/x-png'
Extensions = 'png'
end>
WebDirectories = <
item
DirectoryAction = dirInclude
DirectoryMask = '*'
end
item
DirectoryAction = dirExclude
DirectoryMask = '\templates\*'
end>
RootDirectory = 'C:\WebRoot'
Left = 80
Top = 64
end
end
[2]: