WebBroker - Delphi a Web I

vložil Radek Červinka 25. srpna 2011 00:39

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.


Nabízíme Delphi školení a konzultace na různá témata, primárně ve Vaší firmě.

Tagy: ,

Návody

Komentáře

25.8.2011 9:53:08 #

JaroB

První verze byla už v Delphi 3 a jen v Client/Server Suite (isapi/nsapi, cgi jako standard) a byla  na to i spousta doplňků.

JaroB

25.8.2011 10:37:53 #

Radekc

Díky za upřesnění.

Ještě pozn.: společná nevýhoda byla že se to špatně ladilo. Jako normální aplikace se to ladí úplně v pohodě - proto jsem to taky zde prezentoval - podle mne od EMBT velmi dobré rozšíření.

Radekc

25.8.2011 10:41:50 #

JaroB

Nebylo to úplně špatné ani tehdy, ale za tu hrůzu peněz a nejrůznější omezení to ale nestálo. Snad největší kix byl, když jsem se pokusil aplikaci z Delphi 3 namigrovat do Delphi 2005 a narazil jsem na nekompatibilitu parametrů - odstranilo mi to odkazy na eventy...

JaroB

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS