WASH. Evgeni Genev. Universität Freiburg

Ähnliche Dokumente
WASH - Web Authoring System Haskell

Seminar Fortgeschrittene Techniken der funktionalen Programmierung

Scriptsprachen für dynamische Webauftritte

Web-basierte Anwendungssysteme PHP Teil 2

Grundlagen Internet-Technologien INF3171

Inhalt. Vorbemerkungen... 1

CGI Programmierung mit Ha. Markus Schwarz

Internet-Technologien

Perl-Praxis. CGI-Skripte. Madis Rumming, Jan Krüger.

PHP & HTML. Kurzeinstieg HTML. Zellescher Weg 12 Willers-Bau A109 Tel Michael Kluge

PPS-Design einer eigenen WWW-Homepage WS 2002/2003. Anforderungen an eine Webseite

01 Einführung in PHP. Einführung in PHP 1/13 PHP in Aktion

2. Webapplikationen. Webzugang. Präsentation. Geschäftslogik. Browser. Datenhaltung. JSP, Servlets, ASP, PHP. HTML + JavaScript? +Java Applets?

XHTML. Lernfragen zu XHTML. Was ist HTML? Überblick

Praktische Informatik 3

V by WBR1/BFH-TI 2011 by MOU2/BFH-TI

12. Jgst. 3. Kursarbeit Datum: Fach: Informationsverarbeitung (Leistungskurs) & )!!*+,!- -.!-

Diese neuen Gestaltungsmöglichkeiten können nun auf den Web-Anzeigenmarkt angewandt werden: Wissensbaustein»Anzeigenmarkt: CSS-Einsatz«(S.

Perl-Praxis. CGI-Skripte. Jörn Clausen Jens Reeder, Jan Krüger

Klausur im Modul: Softwaretechnik (SWT) - WEB

XSLT XSL Transformations

Multimedia im Netz Wintersemester 2013/14. Übung 05 (Nebenfach)

Wiederholung: Dynamische Seiten mit Datenbanken. PHP JavaScript Kapitel 2

ASP: Active Server Pages

Web-Techniken Einführung in JavaScript

Webanwendungen mit Java und JavaServerPages

Programmieren von Webinformationssystemen

Perl-Praxis. CGI-Skripte. Jörn Clausen

JavaScript O'REILLY. Das umfassende Referenzwerk. Deutsche Übersetzung von Ralf Kuhnert, Gisbert W. Selke & Harald Selke

Python CGI-Skripte erstellen

Inhalt HTML 2. Applets Frames Formulare CSS cascading style sheets. Lehrveranstaltung Internet in AT Dr.-Ing. A. Braune TECHNISCHE UNIVERSITÄT DRESDEN

DOKUMENTATION. CaptchaAd mit Java. Entpacken und Hochladen. Die Schritte zur Integration des CaptchaAd-Modul im Einzelnen. Informationen von CaptchaAd

HTML Scripting. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 06. Dezember 2017

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Partner-ID in eigenen Seiten verwenden

Praktikum Datenbanken und verteilte Systeme SS Java Server Pages und Servlets -

Dokumentation Externe Anzeige von Evento Web Dialogen

Java Server Pages (JSP)

CS1024 Internetbasierte Systeme

Web-basierte Anwendungssysteme PHP-Einführung

Übung zur Vorlesung Multimedia im Netz

GERICHTETER GEWICHTETER GRAPH DESIGNDOKUMENT

Dynamik bis zur DB-Interaktion. Marc Schanne. CGI Möglichkeiten

7 Tabellen. 7.1 Erstellen einer Tabelle. - übersichtliches Gestalten von Websites - enorme Steigerung der Layoutmöglichkeiten durch Tabellen

Perl-Praxis CGI-Skripte 0-0/22

Einführung in PHP. NLI-Kurs BBS am Museumsdorf Cloppenburg Außenstelle Löningen

Mit PL/SQL auf s ipad

Funktionale Programmierung

APEX Datenverwaltung Wo sind die Daten gerade? Dr. Gudrun Pabst

Programmieren 2 (Prof. Hasbargen) Klausur

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans

Mit PL/SQL auf s ipad

HTTP. Arthur Zaczek. Aug 2015

1)Login Funktion ohne Datenbank

11. Webautomatisierung HTTP Protokoll Tabellen Formulare und Parameter Templates, Graphik Ajax Zustandsinformationen

PPS-Veranstaltung. 1. Praxisveranstaltung

Microsoft.NET & IBM System i - Webanwendungen mit AJAX - I Christian Neißl,

Funktionen nur wenn dann

Java - Webapplikationen

Bei einer deutschen Installation muß man den Window Server und pbs aus StartUp in Autostart verlagern sowie die Datei

jquery Einstieg 2 CSS manipulieren; toggle, hide und show

Grundlagen Internet-Technologien. Ajax und Cookies&Sessions Version 1.00

Erste Schritte mit XHTML

Eine Untersuchung der Funktionen des Apache Wicket Webframeworks

JSP Usereingabe. Inhalt. 1 Zielsetzung. SEW(3.Jg) Unterlagen zu Java Server-Pages Teil 2

easylearn Webservice lsessionservice Interface für Single Sign On (SSO)

Formulare in html Bernd Bl umel Version: 1. April 2003

Datenbank-basierte Webserver

Kompendium der Web-Programmierung

Typo3 & QFQ. Carsten Rose, I-MATH, University of Zurich, 2017

Praktikum im Grundstudium

Datenbanksysteme SS 2007

<form name= test action= test.php method= get autocomplete= on > </form> <form name= test action= test.php method= post autocomplete= on > </form>

Java Server Pages 2 und Benutzerdefinierte Tags. Strahil Yordanov

Praktikum im Grundstudium

HTML-Grundlagen (X)HTML:

Anwendungsprotokolle: HTTP, POP, SMTP

Web-Anwendungen Teil 2 PHP kl. Studienprojekt (Praktikum) Winter 2014/ Daniel Fett

Multimediale Web-Anwendungen. JavaScript. Einführung. MWA JavaScript-Einführung Dr. E. Schön Sommersemester 2015 Folie 1.

Inhaltsverzeichnis. Open-Xchange Authentication & Sessionhandling

Einstieg in die Informatik mit Java

VWA Rhein-Neckar Dipl.-Ing. Thomas Kloepfer. Kommunikation I (Internet) Übung 5 Formulare

Erstellt bei Teris Cooper Freie Nutzung des PDF Dokuments.

Multimedia im Netz. Übung zur Vorlesung. Ludwig-Maximilians-Universität Wintersemester 2010/2011

Freie Markierung Die Templating-Engine FreeMarker im Einsatz

Programmieren von Webinformationssystemen

Dynamische Webseiten mit PHP. Oder: LAMP - The open way

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Mul$media im Netz (Online Mul$media) Wintersemester 2014/15. Übung 02 (Nebenfach)

Nerdball Ein automatischer IRC Image Collector

Vorwort. Tag 1 Von der Idee zum eigenen Web. Tag 2 Am Anfang war... HTML

Grundlagen. Wie sind PHP-Dateien aufgebaut?

Dynamische Webanwendungen

2 Eine einfache Programmiersprache

Multimedia im Netz Wintersemester 2013/14. Übung 01 (Hauptfach)

Dabei sollen die Nutzern nach einer Authentifizierung entsprechend ihren Rechten Begriffe ändern, anlegen und kommentieren können.

Funktionen nur wenn dann

Kommunikationsnetze. 7. Das World Wide Web 7.4 Client- vs. Server-basierte Techniken für dynamische Webseiten

D.18 D.20 D Java-Server-Pages. 4 Java-Server-Pages (2) 4.1 Auszeichnungen. 4.2 Deployment. Nachteil von Servlets

Transkript:

WASH Evgeni Genev Universität Freiburg 18.02.2008 1

Motivation Früher Statische Webinhalte Heute Dynamische Webinhalte Clientseitige Anwendungen JavaScript, VBScript... Serverseitige Anwendungen PHP, mod_perl, JSP... CGI Common Gateway Interface 2

Der Wash / CGI Approach EDSL für serverseitiges Webscripting mit Sitzungen (Sessions) *(später in Session-Sprache) und Formulakombinatoren *(später in Widget-Sprache) 3

Exkurs: DSL und EDSL Domänenspezifische Programmiersprache formale Sprache für ein bestimmtes Problemfeld Domänenspezifische eingebettete Programmiersprache eine echte Untermenge der Wirtssprache gesenkter Implementierungsaufwand gesenkte Fehleranfälligkeit 4

Was sind Sitzungen? Eine alternierende Reihe von Webformularen und generierten Antwortdokumenten von dem gleichen Benutzer von dem gleichen Browser POST url0; FORM f1; POST url1; FORM f1;... Personalisierung der Benutzer Voraussetzung - ein Sitzungszustand sichtbar für den Klienten und für den Server 5

Session Beispiel 6

Sitzungszustand Das zugrunde liegende Protokol HTTP ist zustandslos und unterstützt keine Sitzungen Gebräuchliche Technik speichere ein Token in jedes FORM und übergebe es mit jedem POST der Zustand mit der URL übergeben der Zustand auf dem Klient als Textdatei speichern (Cookies) die Zustandsdaten in versteckte Eingabe-Felder speichern und übergeben 7

Sitzungen Probleme Der Zurück-Knopf Das Kopieren von Sitzungen Das Lesezeichen-Problem Wie geht WASH/CGI mit diesen Problemen um? * später in Session-Sprache 8

WASH / CGI Teilprachen Dokument-Sprache Widget-Sprache Session-Sprache 9

Dokument-Sprache Erzwingt die Generierung von wohlgeformten XHTML Dokumente XHTML Dokumente bestehen aus: Element-Knoten Attribut-Knoten Text-Knoten 10

Wohlgeformtes XHTML-Dokument <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>hello World</title> </head> <body bgcolor= white > <h1> Hello World </h1> </body> </html> Attribute Element Text 11

Dokument-Sprache von XHTML nach WASH Konstruktoren für die Element-Knoten sind für jedes Element vordefiniert z.b.: <html>...</html> wird durch die html-funktion implementiert <head>...</head> head-funktion <title>...</title> title-funktion <body>...</body> body-funktion <h1>...</h1> h1-funktion usw. 12

Dokument-Sprache - Funktionen Konstruktoren für die Element-Knoten Nehmen als Argumente Sequenzen von: Kind-Elementen Text-Knoten Attributen Sequenzen werden mit der für Monaden üblichen do-notation, oder den Operatoren '>>' und '##' verknüpft 13

Dokument-Sprache - Funktionen z.b. die Funktion body: Beispiel: body :: (Monad m, AdmitChildBODY e) => WithHTML BODY m a -> WithHTML e m a body (do attr "bgcolor" "white" h1 (text "Hello World")) Wofür stehen 'AdmitChildBODY e' und 'WithHTML BODY m a'? 14

AdmitChildBODY und WithHTML BODY Der Parametertyp 'e' in 'WithHTML e m a' steht hier für den Name des Eltern-Knotens 'AdmitChildBODY e' muss ein BODY Kind erlauben 'WithHTML BODY m a' nur gültige Kinder-Elemente von BODY können in diesem Kontext benutzt werden* Im Weiteren sehen wir, dass die anderen Funktionen ähnlich definiert werden * Dadurch wird die (quasi)-xhtml-gültigkeit erzwungen 15

Textknoten und die leere Sequenz text text:: (Monad m, AdmitChildCDATA e) => String -> WithHTML e m () empty empty :: Monad m => WithHTML x m () Wie wird der Beispielkode auf der Seite 11 generiert? 16

Teil 1 WASH / CGI - einfache Beispielanwendung module Main where import Prelude hiding (head, span, div, map) import WASH.CGI.CGI main = run maincgi... 17

Teil 2... WASH / CGI - einfache Beispielanwendung maincgi = ask (html (do head (title (text "Hello World")) body (do attr "bgcolor" "white" h1 (text "Hello World")))) 18

standardpage Der Standard Dokument Wrapper standardpage ttl nodes = html (do head (title (text ttl)) body (h1 (text ttl) >> nodes)) Definiert ein parametrisiertes Dokument Illustriert die Verwendung von Haskell-Funktionen zur Erstellung eigener Abstraktionen in einem WASH-Programm 19

WASH / CGI - einfache Beispielanwendung v2 module Main where import Prelude hiding (head, span, div, map) import HTMLMonad import CGI main = run maincgi maincgi = ask (standardpage "Hello World" empty) 20

WASH / CGI Teilprachen Dokument-Sprache Widget-Sprache Session-Sprache 21

Widget-Sprache Widgets Komponente einer grafischen Benutzeroberfläche Ein Widget-Konstruktor erstellt ein XHTML-Element mit zugehörigen Attributen und zusätzlich gibt noch ein Eingabe-Handle zurück Das Handle wird meistens an eine Variable gebunden - dadurch wird die weitere Interaktion zwischen Klient und Server ermöglicht 22

Widgets Wir werden die folgenden Eingabeelemente betrachten Formulare Eingabeknöpfe und Eingabefelder für Texteingabe Wir betrachten die Folgenden aus Zeitmangel nicht: Radiobutton Checkbutton usw. 23

Widget-Sprache - Funktionen Formular makeform :: (AdmitChildFORM context) => WithHTML FORM CGI a -> WithHTML context CGI () Eingabeknopf submit0 :: (CGIMonat cgi, AdmitChildINPUT context) => CGI () -> HTMLField cgi INPUT context () 24

Widget-Sprache Beispiel 1 Formular + Eingabeknopf Beispiel main = run page1 page1 = ask (standardpage "Hello World!" (makeform myinfo1)) myinfo1 = do p (text "This is my second CGI program!") submit0 page2 (attr "value" "Click for my hobbies")... 25

Widget-Sprache Beispiel 1 Formular + Eingabeknopf Beispiel... page2 = ask (standardpage "My hobbies are" (makeform myinfo2)) myinfo2 = ul (do li (text "swimming") li (text "music") li (text "skiing")) 26

Widget-Sprache Texteingabefeld textinputfield :: (AdmitChildINPUT context) => HTMLField context (InputField String INVALID) Eingabeknopf submitbutton :: (CGIMonad cgi, AdmitChildINPUT context, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLField cgi INPUT context () 27

Widget-Sprache Beispiel 2 Teil 1... main = run page1 page1 = standardquery "Hello World!" $ do p (text "This is my third CGI program!") pname <- p (do text "Enter your name " textinputfield (attr "size" "10")) submit pname page2 (attr "value" "Click for my hobbies")... 28

Widget-Sprache Beispiel 2 Teil 2... page2 pname = standardquery "My hobbies are" $ do p (text "Hi, " ## text (value pname) ## text "!") ul (do li (text "swimming") li (text "music") li (text "skiing")) 29

WASH / CGI Teilsprachen Dokument-Sprache Widget-Sprache Session-Sprache 30

Session-Sprache der WASH Approach In den meisten Sprachen wird eine Anwendung durch mehrere Skripte implementiert großer Synchronisierungsaufwand die Skripten müssen den gleichen Konzept der Zustandsspeicherung folgen die Skripte müssen gegenseitig ihre Namen kennen Aus dem gleichen Grund wie oben ist das auch eine gute Fehlerquelle 31

Session-Sprache der WASH Approach In WASH ist die ganze Anwendung ein zusammenhängendes Haskell-Programm. Dadurch: entfällt der Synchronisierungsaufwand der Session-Zustand wird transparent für den Programmierer Wie wird der Sessionzustand übergeben, sehen wir später 32

Session-Sprache - Funktionen Sitzungen werden durch 2 Operatoren konstruiert ask :: WithHTML XHTML_DOCUMENT CGI a -> CGI () tell :: (CGIOutput a) => a -> CGI () ask stellt eine Frage in Form einer HTML-Seite kann zur weiteren Interaktion führen tell nimmt einen beliebigen Wert, der zu einer HTTP-Antwort konvertiert werden kann, und liefert die entsprechende CGI-Aktion beendet die Interaktion, d.h. erlaubt keine Fortsetzung der Sitzung 33

ask und tell ask maincgi = ask (standardpage "Hello World" empty) tell maincgi = tell (Location $ URL "http://whereveryouwantto.com/") Wichtig! Die CGI-Aktionen sind keine IO-Aktionen 34

Session-Sprache - Funktionen Um den Schritt von CGI- zu IO-Aktionen(und umgekehrt) zu machen, braucht man noch 2 Funktionen run :: CGI () -> IO () io :: (Read a, Show a) => IO a -> CGI a Haskell erwartet eine IO-Aktion als Hauptprogramm run wandelt eine CGI-Aktion in eine IO-Aktion um io wandelt eine IO-Aktion in eine CGI-Aktion 35

run und io Wir haben schon gesehen wie run funktioniert main = run maincgi io (aus GuessNumber.hs auf der WASH - Webseite) maincgi = io (randomrio (1,100)) >>= \ anumber -> standardquery "Guess a number" $... Durch ask und io wird ein abstraktes Niveau aufgebaut 36

WASH/CGI Session ask startet eine neue Session, die von tell beendet wird io wird innerhalb einer CGI-Aktion ausgeführt 37

WASH/CGI Session jeder Antwortdokument hat ein verstecktes Eingabefeld, das alle Antworte auf io und ask beinhaltet, die zu diesem Formular führen. 38

Session-Sprache - Beispiel Die Beispielanwendung GuessNumber von der WASH/CGI: Gallery GuessNumber.hs 39

Zusammenfassung WASH bietet einige Vorteile Gesenkte Fehleranfälligkeit XHTML-Kompatibilität Transparente Sitzungen 40