WebBroker StandAlone 模式下当作一个普通的 WebServer 响应静态网页或其它文件的请求

用 WebBroker 开发网页服务器端程序,在第一个阶段,最好采用 StandAlone 模式。开发完成后,再重新编译成 CGI 或者 ISAPI 或者 APACHE 的模块用于实际环境。这样的好处是 StandAlone 模式下它就是个独立的程序,非常方便 Debug,可以很容易地在 Delphi IDE 里面单步跟踪调试。

在 StandAlone 模式下,WebBroker 的程序就是一个独立的 EXE,这个 EXE 自己内嵌了一个 HTTP Server,无需额外的 IIS 或者 APACHE 作为 HTTP Server。

在这种情况下,如果浏览器请求一个静态网页,比如 abc.html,WebBroker 程序该如何响应,才能像是 IIS 一样将这个静态网页文件发送给浏览器?如果是 CSS 文件,或者 JavaScript 文件,又该如何响应?

以下代码,我自己测试过,能够正常运行,完全可以把一个 WebBroker 框架的 Delphi 程序当作一个类似 IIS 的 HTTP SERVER  来用。

procedure TWebModule1.HandleFileRequest(const FileName: string; Request: TWebRequest;
  Response: TWebResponse);
var
  FC, Ext: string;
  FS: TFileStream;
  SL: TStringList;
begin
{------------------------------------------------------------------------------
  处理来自浏览器对静态页面文件的请求:

  对于 Stand alone 模式的 WebBroker 程序,这个默认 Action 可以用来当作一个 Web Server 的根:

  如果请求的 path 是一个文件,则返回一个文件给客户端。这样,http://ip/WebBroker.exe/abc.html

  就可以从这里返回。

------------------------------------------------------------------------------}
  if FileExists(FileName) then
  begin
    //以下代码,测试通过。网页里面有图片链接。网页能够正确显示图片。
    Ext := LowerCase(ExtractFileExt(FileName));
    if (Ext = '.html') or (Ext = '.htm') or (Ext = '.css') or (Ext = '.js') or (ext = '.txt') then
    begin
      {-----------------------------------------------------------------------
        下载文本文件给浏览器,不能将文本文件加载为字符串然后用字符串返回,
        而是应该直接用 Stream 来返回。用字符串返回,可能会有问题。估计原因是文件里面的字符串有些字符的编码有问题导致。
      ----------------------------------------------------------------------}
      FS := TFileStream.Create(FileName, fmOpenRead);
      Response.ContentStream := FS;

      if (Ext = '.html') or (Ext = '.htm') then
      begin
        Response.ContentType := 'text/html';
      end
      else
      if (Ext = '.css') then
      begin
        Response.ContentType := 'text/css';
      end
      else
      if (Ext = '.js') then
      begin
        Response.ContentType := 'text/javascript';
      end
      else
      if (ext = '.txt') then
      begin
        Response.ContentType := 'text/plain';
      end;
    end
    else
    if (Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.png') or (Ext = '.bmp') or (Ext = '.gif') then
    begin
      FS := TFileStream.Create(FileName, fmOpenRead);
      Response.ContentStream := FS;
    end;
  end;

上述函数,必须要放在  WebBroker 的默认 Action 里面:

procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  S: string;
begin
{--------------------------------------------------------------------------
  StandAlone 模式下,作为一个 WebServer,浏览器请求的静态文件,需要直接输出。
  如果浏览器没有请求静态文件,则输出动态创建的默认页面给浏览器。
--------------------------------------------------------------------------}
  S := Request.PathInfo;

  if FileExists(Self.FMyRoot + S) then
  begin
    Self.HandleFileRequest(Self.FMyRoot + S, Request, Response);
  end
  else
  if S = '/' then
  begin
    S := '';
    S := '<html><head></head><body>这是默认页面</body></html>';
    Response.Content := S;
  end
  else
  begin
    Response.Content := '';
  end;

  Handled := True;
end;

当作为  HTTP Server 的 WebBroker 的程序接收到来自浏览器的请求,并且发现这个请求没有对应的  Action 来处理的时候,就会触发这个默认的 Action。然后在这里的代码,检查浏览器请求的文件,是否存在,如果存在,则输出这个文件。


注意:我之前的做法是将图片文件当作流来输出,而文本文件比如 html 和 css 则导入为字符串,然后用 Response.Content := 字符串 的方式。结果在一些比较复杂的页面会出错。主要可能是因为字符编码格式的原因。而直接输出流,反倒就没问题了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Delphi WebBroker是一种基于Delphi编程语言开发的用于Web应用程序开发的框架。它提供了一组组件和类,帮助开发人员构建功能丰富、稳定、可伸缩和安全的Web应用程序。 Delphi WebBroker可以用于开发各种类型的Web应用程序,包括网站、Web服务、Web API等。它使用了一种基于事件驱动的开发模式,通过响应HTTP请求和生成HTTP响应来处理用户的请求和交互。 Delphi WebBroker提供了丰富的组件和类,用于处理HTTP请求响应、处理表单数据、访问数据库、生成动态内容等。它支持多种Web服务器和协议,包括Apache、IIS、CGI、FastCGI等。 使用Delphi WebBroker进行Web开发具有以下优势: 1. 易于使用:Delphi是一种易于学习和使用的编程语言,开发人员可以快速上手并迅速开发出高质量的Web应用程序。 2. 高性能:Delphi WebBroker采用了高效的事件驱动开发模式,可以处理大量并发的HTTP请求,并提供了缓存、压缩、连接池等功能,提高了性能和吞吐量。 3. 安全性:Delphi WebBroker提供了多种安全机制,包括用户认证、访问控制、数据加密等,保护Web应用程序免受恶意攻击和数据泄露。 4. 可扩展性:Delphi WebBroker支持插件和扩展机制,开发人员可以根据需要添加自定义功能和模块,实现灵活的应用程序定制和功能扩展。 总之,Delphi WebBroker是一种强大而灵活的框架,为开发人员提供了丰富的工具和功能,帮助他们构建出高质量、高性能和安全的Web应用程序。无论是初学者还是有经验的开发人员,都可以通过Delphi WebBroker轻松地开发出各种类型的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值