背景知识
Delphi 的 WebBroker 框架,用来做一个给浏览器访问的 Web 服务器后端程序,非常的简单又好用。尤其是在最近的新版 Delphi 11 开始增加了 WebStencils 功能以后,再配合 HTMX 简直是 WEB 开发的利器。
WebBroker 的基本规则很简单,就是通过 URL 里面的不同的 Path 来分派访问到不同的事件方法里面去。对应到 WebModule 里面的多个不同的 WebActionItem 的 OnAction 事件。
所谓 URL 的不同路径,比如:
- http://localhost/login
- http://localhost/User?name=pcplayer
上述不同的路径,就是 PathInfo;
PathInfo 的规则
WebBroker 的 TWebModule1 里面,添加一个 ActionItem1,在属性面板里面,设置它的 PathInfo 为 abc,IDE 会自动在它的前面添加斜杠: / ;变成 “/abc”
为这个 ActionItem1 增加一个 OnAction 事件方法:
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.Content := 'this is from ' + Request.PathTranslated;
end;
访问路径 :http://localhost:8080/abc 就会触发上述事件。
值得注意:http://localhost:8080/abc/ 结尾多一个斜杠,WebBroker 不会解释为 PathInfo 是 /abc,而是解释为 /abc/ 这样就不会触发上述事件,而是去执行默认的 Action;
实际情况:如果设置 PathInfo 是 /abc*,也就是在 abc 后面加上一个 * 号,则使用 http://localhost:8080/abc/ 访问也没有问题了。因此,最好是给每个 PathInfo 后面都加上 * 号。
WebServices
WebServices 也是基于 WebBroker 的。因此,一个 WebServices 在支持 SOAP 接口函数调用的同时,是可以当作一个 WebServer 的。给它的 WebModule 里面增加 ActionItem 设置好 PathInfo 就可以用浏览器访问。
WebServices 的自动分派
WebService 有两个 PathInfo:
- wsdl
- soap
上述两个 PathInfo 在 WebServices 的 WebModule 里面,看不到对应的 ActionItem ;在 WebServices 的 WebBroker 里面,有 3 个控件:
- HTTPSoapDispatcher1
- HTTPSoapPascalInvoker1
- WSDLHTMLPublish1
在 HTTPSoapDispatcher1 和 WSDLHTMLPublish1 都有内嵌的一个对象:FWebDispatch: TWebDispatch; 而且直接暴露在 published 部分,也就是在属性面板里面能够看到。这个 TWebDispatch 有一个属性:PathInfo。TWebDispatch 定义在单元 Web.AutoDisp.pas 里面。看单元名字,就是自动分派。也就是说,在 WebModule 里面放置的对象,如果它内部有 TWebDispatch 对象并且有 PathInfo 则对该 PathInfo 路径的访问会自动分派到该对象,不需要专门在 WebModule 里面为这个 PathInfo 添加一个 ActionItem.
要点总结
- WebBroker 里面,WebActionItem 的路径,后面必须加上 * 号,比如路径是 abc,必须变成 abc* 以避免实际 URL 的结尾有路径斜杠时,不能分派到这个 Action;
- WebService 里面,可以给 WebModule 增加除了 wsdl 和 soap 以外的其它路径,作为 WEB 服务器使用。一个 WebServices 服务器可以同时支持 SOAP 访问和来自浏览器的页面访问。

2968

被折叠的 条评论
为什么被折叠?



