在开发移动端App的时候,需要使用 WebBrowser 作为平台来展示H5界面,这个时候就需要在App内部实现一个 HttpServer 服务。对于 Delphi 来说,使用 Indy 的 TIdHTTPServer 实在是最好不过了。为了方便使用,我们将 TIdHTTPServer 根据我们的需要进行了封装,这样使用起来会比较方便。本文将详细介绍封装好的控件 TWebServer(有不同需求的可以根据源代码自行修改)。
(没有CSDN 分数的,联系QQ:910731685 发给你)
一、控件属性:
序号 | 属性 | 类型 | 说明 |
1 | DefaultPort | Word | Http服务的端口号,默认:8080 |
2 | RootDir | string | 本地H5文件的根目录。windows下默认在执行文件所在目录中的WWW子目录,android 默认在 TPath.GetDocumentsPath 木下的 WWW 子目录 |
3 | MaxConnections | integer | 允许客户端的最大连接数。默认:0 表示不限制。 |
4 | Active | Boolean | 是否启动 Http 服务,默认: False |
二、控件方法:
序号 | 方法 | 类型 | 说明 |
1 | StartServer | function | 启动Http服务函数 :function StartServer(var errmsg : string) : Boolean。成功: True,启动失败则返回False,同时 errmsg 表示错误信息。 |
2 | StopServer | procedure | 停止Http服务 |
三、控件事件:
序号 | 事件 | 类型 | 说明 |
1 | OnPost | 事件 | 前端向服务器发送 Post 请求时触发这个事件,本控件只支持字符串参数(流参数未支持)。RequestStr: string; var ResponseStr : string。其中 RequestStr 表示请求参数,ResponseStr 表示返回给前端的字符串参数。 |
2 | OnGetParams | 事件 | 当前端通过 Get 请求服务,如果没有找到对应的文件,同时也存在请求连接参数或者 form-data 参数,就会触发这个事件。 参数: URL:请求路径 举例如下: 则事件中的参数如下: |
四、控件使用:
var
WebServer : TWebServer;
WebServer := TWebServer.Create(nil);
WebServer.DefaultPort := 8080; //默认就是8080,可以写
WebServer.OnPost := myOnPost;
WebServer.OnGetParams := myOnGetParams;
if not WebServer.StartServer(errmsg) then
showmessage(errmsg); //服务器打开失败
五、注意事项:
1. 把 H5 的文件放置到 RootDir 属性所指的根目录。对于 windows 可以直接拷贝,对于移动端,可以通过 Delphi 的 Deployment 菜单增加,可以包含子目录。
2. 对于 H5 静态文件系统已经默认处理了,移动App正常情况下也不会 Get 不存在的文件,而且还带参数,所以 OnGetParams 事件根本无需处理。
3. 在移动 App 成功打开服务后,找到IP地址,在 PC上也是可以访问的。
4. 如果在 PC上测试,需要注意防火墙限制。
控件已经在 PC 和 android 上测试通过。