1 / 25

Alice Server Pages

Alice Server Pages. Funktionale Programmierung und das Web. Gliederung. Anforderungen Entwurf Architektur Syntax Cookies Beispiel Implementierung Compileserver Word Sequences verwandte Projekte Zusammenfassung Fazit Ausblick Demo. Anforderungen.

aldon
Download Presentation

Alice Server Pages

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Alice Server Pages Funktionale Programmierung und das Web Simon Georg Pinkel, Betreuer: Guido Tack & Thorsten Brunklaus

  2. Gliederung • Anforderungen • Entwurf • Architektur • Syntax • Cookies • Beispiel • Implementierung • Compileserver • Word Sequences • verwandte Projekte • Zusammenfassung • Fazit • Ausblick • Demo

  3. Anforderungen • Compiler zur Bearbeitung/Interpretation von HTML-seiten mit eingebetteten Programmfragmenten • Handhabung von dynamischem Input wie Formularvariablen oder Cookies • Datenbankschnittstelle • Niedrige Reaktionszeiten

  4. Http Server Compiler Datenbank index.asp Architektur

  5. Http Server CGI Cache Msp-Compiler index.cgi Datenbank index.msp Architektur : ML Server Pages

  6. Architektur : Alice Server Pages Http Server CGI Cache Interfaceclient (C) index.stc Datenbank Compileserver (Alice) index.amsp

  7. Syntax • Alice lässt sich folgendermassen einbetten: • <?AMSP [alice-programm] ?> • <?AMSP= [alice-ausdruck beliebigen typs] ?> • <?AMSP$ [wordsequence] ?>

  8. Syntax • Alice lässt sich folgendermassen einbetten: • <?AMSP [alice-programm] ?> • <?AMSP= [alice-ausdruck beliebigen typs] ?> • <?AMSP$ [wordsequence] ?> • Um auf Formularvariablen/Cookies zuzugreifen, muss ein Skript einen speziellen Typ „formvar“ bzw. „cookies“ nach dieser Grammatik deklarieren:

  9. Cookies • Lokal(beim Browser) gespeicherte Datenpakete  verteilter Zustand der Server Page • Programmierer muss Typ „cookies“ definieren  Wert „cookies:cookies“ enthält eingehende Cookiedaten • können über folgende Funktionen gesendet/gelöscht werden: val setCookies : cookies -> unit val deleteCookie : string -> unit

  10. ../index.amsp?n=6 <?AMSP type formvar = { n : int option } ?> <html><head>...</head> <body> <ul> <?AMSP val _ = List.app (fn x=> print("<li>" ^ Int.toString x) List.tabulate(#n formvar,fak) ?> </ul></body></html> Beispiel

  11. ../index.amsp?n=6 ../amspcache/<md5>.aml <?AMSP type formvar = { n : int option } ?> type formvar = { n : int option } val _ = print („ ") val _ = List.app ... val _ = print („ ") val formvar = ... <html><head>...</head> <body> <ul> <html><head>...</head> <body> <ul> <?AMSP val _ = List.app (fn x=> print("<li>" ^ Int.toString x) List.tabulate(#n formvar,fak) ?> </ul> </body></html> </ul></body></html> Beispiel

  12. ../index.amsp?n=6 ../amspcache/<md5>.aml HTML-output <?AMSP type formvar = { n : int option } ?> type formvar = { n : int option } val _ = print („ ") val _ = List.app ... val _ = print („ ") <html><head>...</head> <body> <ul> <li>1 <li>1 <li>2 <li>6 <li>24 <li>120 </ul> </body></html> val formvar = ... <html><head>...</head> <body> <ul> <html><head>...</head> <body> <ul> <?AMSP val _ = List.app (fn x=> print("<li>" ^ Int.toString x) List.tabulate(#n formvar,fak) ?> </ul> </body></html> </ul></body></html> Beispiel

  13. Implementierung:Compileserver Anfrage auf index.amsp: • mit .amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen CGI Cache Interfaceclient (C) <md5sum>.stc Compileserver (Alice) index.amsp

  14. Implementierung:Compileserver Anfrage auf index.amsp: • mit .amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen • Interfaceclient sammelt Daten und sendet sie an Compileserver CGI Cache Interfaceclient (C) <md5sum>.stc Socket - Kommunikation Compileserver (Alice) index.amsp

  15. Implementierung:Compileserver Anfrage auf index.amsp: • mit .amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen • Interfaceclient sammelt Daten und sendet sie an Compileserver • Compileserver checkt, ob Cache Eintrag (MD5-summe vom lokalen Pfad der Source) vorhanden bzw. up-to-date und kompiliert gegebenenfalls CGI Cache Interfaceclient (C) <md5sum>.stc Socket - Kommunikation Compileserver (Alice) index.amsp

  16. Implementierung:Compileserver Anfrage auf index.amsp: • mit .amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen • Interfaceclient sammelt Daten und sendet sie an Compileserver • Compileserver checkt, ob Cache Eintrag (MD5-summe vom lokalen Pfad der Source) vorhanden bzw. up-to-date und kompiliert gegebenenfalls • Compileserver ruft über ComponentManager.Eval das Kompilat auf CGI Cache Interfaceclient (C) <md5sum>.stc Socket - Kommunikation Struktur mit Zustand Compileserver (Alice) index.amsp

  17. Implementierung:Compileserver Anfrage auf index.amsp: • mit .amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen • Interfaceclient sammelt Daten und sendet sie an Compileserver • Compileserver checkt, ob Cache Eintrag (MD5-summe vom lokalen Pfad der Source) vorhanden bzw. up-to-date und kompiliert gegebenenfalls • Compileserver ruft über ComponentManager.Eval das Kompilat auf • gesammeltes HTML/Cookiedaten werden an Interfaceclient geschickt CGI Cache Interfaceclient (C) <md5sum>.stc Socket - Kommunikation Struktur mit Zustand Compileserver (Alice) index.amsp

  18. Implementierung:Compileserver Anfrage auf index.amsp: • mit .amsp assoziiertes CGI-Programm(Interfaceclient) wird aufgerufen • Interfaceclient sammelt Daten und sendet sie an Compileserver • Compileserver checkt, ob Cache Eintrag (MD5-summe vom lokalen Pfad der Source) vorhanden bzw. up-to-date und kompiliert gegebenenfalls • Compileserver ruft über ComponentManager.Eval das Kompilat auf • gesammeltes HTML/Cookiedaten werden an Interfaceclient geschickt • Interfaceclient sendet Daten an http Server CGI Cache Interfaceclient (C) <md5sum>.stc Socket - Kommunikation Struktur mit Zustand Compileserver (Alice) index.amsp

  19. Implementierung:Word Sequences • Von den ML Server Pages übernommen: datatype wseq = $ of string | && of wseq * wseq | ...

  20. Implementierung:Word Sequences • Von den ML Server Pages übernommen: datatype wseq = $ of string | && of wseq * wseq | ...  Einsparung von string-Konkatenationen: • Konkatenation ist Baumkonstruktion • Projektion des Baums ist der dargestellte string • Bei Versendung wird der Baum traversiert und die Blätter sequenziell versendet

  21. verwandte Projekte

  22. verwandte Projekte

  23. Zusammenfassung • Compileserver kompiliert Skripte • Formulardaten/Cookies werden geparst und in Alice-record konvertiert • Niedrige Reaktionszeiten dank: • Compile Server • Umgehung der Startup-zeiten von Alice • Von Skripten importierte Komponenten werden im Arbeitsspeicher gecacht • Kann unabhängig vom Http Server betrieben werden • Caching • MySQL-API Aufwand: z4500 Zeilen Kern + z2000 Zeilen Beispielanwendung & Demos

  24. Fazit Alice bietet einige Features, die sich zur Erstellung von Server Pages nutzen lassen: • Statische Typprüfung für Formulardaten/Cookies  frühe Fehlerlokalisierung • Höherstufige Funktionen bei der Erzeugung der Formulardaten/Cookies • First-class compiler zur Skriptkompilierung • Component Manager zur Ausführung von Skripten und Caching importierter Komponenten

  25. Ausblick • Compile Server noch nicht nebenläufig • Anzeige von Kompilierungsfehlern im Browser • High-level Bibliothek für Sitzungs-management • Mehr Datenbank-schnittstellen (ODBC?)

More Related