Delphi.cz

Český portál Delphi

WebBroker - Delphi a Web I

Jak je vidět v seznamu novinek - Delphi XE2 (píšu Delphi, ale většina věcí je i pro C++Builder / vyjma 64bit) bude obsahovat podporu pro HTTPS u DataSnap, WebBroker a spol. Co to je WebBroker? Jedná se o nativní aplikace, které dokáží obsloužit HTTP požadavky, tj. můžete ji použít jako server pro webové prohlížeče. Delphi podporuje i další technologie (VCL for web, DataSnap - někdy příště, zvláště DataSnap je čím dál zajímavější), ale webbroker je základní.

Technologie byla poprvé použita v Delphi 5 (nebo možná i dříve). Výsledný kód může podle verze Delphi být rozšířením IIS, CGI-BIN, modul pro Apache nebo samostatná aplikace implementující HTTP server (Delphi XE+, buďto VCL nebo konzole, lze jednoduše udělat jako službu). A právě poslední možnost (tj. server) spolu s neskutečnou rychlostí je pro mne zajímavá. Jen upozorním, že cílem je spíše Intranet než Internet.

Pokud totiž moje aplikace bude samostatný program bez závislosti na IIS atd. je to pro mne velké plus. Navíc dříve byl webbroker podporován v Kylixu a s téměř 100% jistotou ohledně podpory Linuxu v budoucnosti je to pro mne o to více zajímavé.

WebBroker

Po zvolení možnosti "Web Server Application" je nutno zvolit výsledek kompilace. V podstatě se jedná jen o obsah dpr souboru a pokud je člověk šikovný, tak lze změnit typ.

WebBroker

WebBroker

Výsledná vygenerovaná demo aplikace (konzolová je mnohem jednodušší) - lze ji upravovat nebo z ní udělat službu. Hlavním výsledkem ale je vygenerování TWebModule, což je něco jako DataModule. Pokud zvolíte přes pravé tlačítko "Action Editor" dostanete se do editoru akcí, kde specifikujete URL cesty pro jednotlivé akce.

WebBroker

Detail akce v Object Inspectoru, v událostech je OnAction - to bude vyvoláno v případě zadané URL.

WebBroker

Ukázka jedné obsluhy: podle parametru je poslán výstupní binární stream reprezentují JPG - obrázek je klasické demo z BIOLIFE.

procedure TCustomerInfoModule.CustomerInfoModuleGetImageAction(
  Sender: TObject; Request: TWebRequest; Response: TWebResponse;
  var Handled: Boolean);
var
  Jpg: TJpegImage;
  S: TMemoryStream;
  B: TBitmap;
  ID: Integer;
begin
  // First, make sure that we are at the correct image by moving to that ID
  // in the table.
  ID := StrToIntDef(Request.QueryFields.Values['id'], -1);
  BioLife.Open;
  if not BioLife.Locate('Species No', ID, []) then
    raise Exception.Create('Could not locate image ID');
  Jpg := TJpegImage.Create;
  try
    S := TMemoryStream.Create;
    try
      BioLifeGraphic.SaveToStream(S);
      // The Biolife table stores its bitmaps in a paradox format, instead
      // of raw binary. We need to skip past the first 8 byte header
      S.Seek(8, soFromBeginning);
      B := TBitmap.Create;
      try
        B.LoadFromStream(S);
        Jpg.Assign(B);
      finally
        B.Free;
      end;
      S.Clear;
      Jpg.SaveToStream(S);
      S.Position := 0;
      Response.ContentType := 'image/jpeg';
    except
      // Free the stream if any errors happened
      S.Free;
      raise;
    end;
    // If any errors did not happen, then don't free the stream and
    // simply assign it to the ContentStream. The Response object will
    // take care of freeing it.
    Response.ContentStream := S;
  finally
    Jpg.Free;
  end;
end;

Jak je vidět jsou předány dva parametry: Request a Response, tj. HTTP požadavek a odpověď.

To je ale jen začátek - v instalaci jsou komponenty typu TPageProducer, TQueryTableProducer atd., které např. generují odpověď jako tabulku dle datasetu, nebo načtou soubor z disku a ten zobrazí (případně provedou nahrazení speciálních tagů).

S předchozí verzí Delphi bylo dodáváno demo pro WebBroker, ale používalo BDE. Přenesl jsem ho do Delphi XE a upravil na samostatnou aplikaci. Pokud tedy máte BDE a tam standardní databázi s rybičkami - zde je demo WebBrokeru (zdrojáky + EXE, není nic dalšího třeba).

Někdy příště VCL for Web nebo DataSnap.

Datum: 2011-08-24 23:39:00 Tagy: web, delphi XE

Návody