Embedded Webserver in Forth

Ähnliche Dokumente
Anwendungsprotokolle: HTTP, POP, SMTP

Grundlagen. Wie sind PHP-Dateien aufgebaut?

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

PHP Formulare. Stefan Maihack Dipl. Ing. (FH) Datum:

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

Nerdball Ein automatischer IRC Image Collector

W7 Projekt im Zusammenhang Gästebuch

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

Forth-2012 Der neue Standard. M. Anton Ertl

Programmieren 2 (Prof. Hasbargen) Klausur

Webtechnologien. Stunde 6 ( ) - HTTP - HTML - Servlets - AJAX. Verschoben haben wir - JSP (Java Server Pages) - JSF (Java Server Faces)

15. Das Hypertext Transfer Protokoll HTTP - Überblick. 1. Requests und Responses. 2. Content Negotiation. 3. State Management (Cookies)

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

W7 Projekt im Zusammenhang Gästebuch

Lösungen der Aufgaben zur Klausurvorbereitung. Aufgabe 1: a) was sagen die folgenden Eigenschaften eines XML-Dokumentes aus? wohlgeformt gültig

Funktionen nur wenn dann

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

Webanwendungen mit Java und JavaServerPages

2. Interaktive Web Seiten. action in Formularen. Formular. Superglobale Variablen $ POST, $ GET und $ REQUEST. GET und POST

PHP MySQL - myphpadmin Formulardaten in eine Datenbank speichern

PHP JavaScript Kapitel 9. Java-Script-Objekte und das Event-Modell

CGI mit C Common Gateway Interface

Anwendersoftware. Thema 7 Dialoggestaltung mit HTML-Formularen. Sommersemester Dr. Henry Herper

Übung zur Vorlesung Multimedia im Netz

Software Engineering I (IB) Node.js. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

2. WWW-Protokolle und -Formate

Forth am PC (und Android) mit Gforth

Web-basierte Anwendungssysteme PHP-Einführung

Formular mit Radio-Buttons

JSP Direktiven. Präprozessor-Anweisungen, die in die JSP-Datei eingebettet sind und vor dem eigentlichen Übersetzungsvorgang ausgeführt JSP

Rechnernetze Übung 12

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

Web-basierte Anwendungssysteme PHP Teil 2

Fehlerbehandlung bei PHP-Formularen ohne Neueingabe von Daten. Inhalt... I. Abbildungen... I. Listings... I. 1 Problemstellung...

CGI-Programmierung. Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008

4. Servlets Ein kleiner Einstieg

javascript Coding-Guidelines 2. Ausgabe Februar 2015 Der Guideline beschreibt den verwendeten Coding-Stil von javascript als eigene Richtline.

Praktikum Netzwerke. Für den Speicherort tragen Sie Ihr Netzlaufwerk und entsprechende Unterverzeichnisse ein, z.b.:

PHP, Ajax und JavaScript

Aufgaben HTML Formulare. Prof. Dr. rer. nat. Claus Brell, Wirtschaftsinformatik, Statistik

PHP und MySQL. Formulare - Datenübertragung mit PHP. Zellescher Weg 12 Willers-Bau A109 Tel

Java zur Realisierung von Internetanwendungen

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

Web Visu Tutorial. Hipecs Web Visu. Übersicht

Entwicklung einer Webseite zur Verwaltung von Prüfungsterminen

SAP-Daten per HTML anzeigen

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

Python CGI-Skripte erstellen

Internet-Technologien

JavaScript clientseitige Programmiersprache zur Dynamisierung von Internetseiten

Funktionen nur wenn dann

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

Perl-Praxis CGI-Skripte 0-0/22

Ein einfaches Gästebuch erstellen

Neues vom STRIP Forth-Prozessor

Crashkurs http - CGI/Servlets(JSF) - Viewer

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

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

1. Übung IT-Management HTML, CSS und JavaScript Teil 2. Einführung, , PC Pool

"Die HTML-PHP-Schnittstelle -- Ein- und Ausgabe der Daten"

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

Statische Typüberprüfung. M. Anton Ertl TU Wien

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

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

Multimedia im Netz Wintersemester 2011/12

ASP: Active Server Pages

Langsame Webseiten nerven!

Transkript:

Embedded Webserver in Forth

Die Anfrage vom Browser GET / HTTP/1.1 User-Agent: Opera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.12 Host: 192.168.5.2 Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 Accept-Language: de-de,de;q=0.9,en;q=0.8 Accept-Encoding: gzip, deflate Cache-Control: no-cache Connection: Keep-Alive

Die Antwort vom Server HTTP/1.1 200 OK Server: MiniModul/1.0 (Forth) Content-Length: 69 Content-Language: de Connection: Keep-Alive: timeout=5 Content-Type: text/html <html> <body> <h1> Hello World </h1> </body> </html>

<HTML> <body> <h1> Hello World </h1> </body> </html> statische Webseite

<HTML> <body> <h1> Hello World </h1> <br><br> <$ @TIME ADD.NUMBER $> </body> </html> Scripting

Ziel: Compilieren von HTML In embedded Systemen gibt es nicht notwendigerweise ein Dateisystem, deshalb soll HTML compiliert werden können. : HELLO ( ) <HTML> <body> <h1> Hello World </h1> <br><br> <$ @TIME ADD.NUMBER $> </body> </html> <$ ;

der Interpreter : HELLO ( ) <HTML> <body> <h1> Hello World </h1> <br>.... BEGIN BL WORD ( char ^str ) FIND ( ^str ^str false xt 1 xt true ) DUP IF.. ELSE DROP ( ^str ) NUMBER? IF. ELSE. THEN THEN DONE? UNTIL.

der modifizierte Interpreter : HELLO ( ) <HTML> <body> <h1> Hello World </h1> <br>.... BEGIN BL WORD ( char ^str ) vex] @ DUP ['] NOOP <> IF ( ^str xt ) EXECUTE ELSE ( ^str xt ) DROP FIND ( ^str ^str false xt 1 xt true ) DUP IF.. ELSE DROP ( ^str ) NUMBER? IF. ELSE. THEN THEN THEN DONE? UNTIL.

HTML 'Compilieren'. <br><br> <$ @TIME ADD.NUMBER $>. : >BUFFER ( ^str -- ) \ >BUFFER fischt alle innerhalb einer Colon-Definition \ gefundenen Wörter vor dem FIND weg und compiliert \ sie als String in einen Puffer. \ Es beendet sich selbst, wenn es auf <$ trifft. DUP COUNT S" <$" COMPARE 0= IF \ das Wort war ein <$ ( ^str ) DROP $$> \ beende den String POSTPONE ADD.STRING ['] NOOP vex]! \ entfernt sich selbst aus dem Interpreter ELSE \ baue das Wort in den String ein ( ^str ) COUNT 1+ ( addr len ) +$$ THEN ;

HTML 'Compilieren' : HELLO ( ) <HTML> <body> <h1> Hello World </h1> <br><br> <$ @TIME ADD.NUMBER $> </body> </html> <$ ; : <HTML> ( -- ) \ ab diesem Wort beginnt HTML <$$ \ initialisiere den Puffer für das HTML S" <html> " +$$ \ und schreibe ein <html> hinein ['] >BUFFER vex]! \ und behandle nachfolgende Wörter als HTML ; IMMEDIATE : $> ( -- ) \ ab diesem Wort beginnt wieder HTML <$$ \ initialisiere den Puffer für das html ['] >BUFFER vex]! ; IMMEDIATE

...und das wird compiliert Das ist der Quelltext... : HELLO ( ) <HTML> <body> <h1> Hello World </h1> <br><br> <$ @TIME ADD.NUMBER $> </body> </html> <$ ;...und das wird compiliert: : HELLO ( ) S <html> <body> <h1> Hello World </h1> <br><br> ADD.STRING @TIME ADD.NUMBER S </body> </html> ADD.STRING ;

Strings häppchenweise compilieren <$$ ( ) legt einen namenlosen Puffer im Dictionary an und merkt sich den Pufferanfang +$$ ( addr len ) hängt den String ab addr hinten an den Puffer an und aktualisiert den DP $$> compilation: ( ) runtime: ( buffer size ) schliesst den Puffer und compiliert ein DLITERAL mit Pufferanfang und Größe

nochmal zu GET Das sendet der Browser: GET / HTTP/1.1 User-Agent: Opera/9.80 (Windows... : GET ( ) BL WORD ( ^str ) \ URL evtl. mit Parameter ( ^str ) SEPARATE.PARAMETERS ( ^url ) ( ^url ) SHOW.PAGE ; : ANSWER.REQUEST ( -- ) \ der Req. vom Browser steht im TIB BL WORD ( ^str ) FIND ( xt -1 xt 1 ^str false ) IF \ GET, POST ( xt ) EXECUTE ELSE.

hier wird endlich die Seite angezeigt : SHOW.PAGE ( ^str ) DUP COUNT S / COMPARE 0= IF \ es war der Slash, zeige die Toppage an ( ^str ) DROP $TOP-PAGE ( ^str' ) THEN ( ^str ) FIND ( xt true ^str false ) IF ( xt ).RESPONSE-HEADER ( xt ) EXECUTE >RESPONSE @ START.CONTENT @ - INSERT.LEN RESPONSEBUFFER @ >RESPONSE @ TYPE ELSE ( ^str ) \ es war kein Wort aus dem Dictionary \ versuche es als Dateinamen COUNT R/O OPEN-FILE ( fileid ior ) \ 0:ok 1:Fehler IF sende Response-Header und ein 404 Not Found ELSE sende Response-Header und die Datei THEN THEN ;

Formulare in HTML. <form action="auswahl" method="post" enctype="text/plain"> Vorname: <input name="vorname" size="20" maxlength="30" ><br> Nachname: <input name="nachname" size="20" maxlength="30" value="bitte ausfuellen"> <br><br> <input type="submit" value="absenden"> <input type="reset" value="abbrechen"> </form>. Nach Drücken auf 'Absenden' kommt vom Browser: POST /auswahl HTTP1.1...Content-Length: 30... Vorname=Hans Nachname=Eckes

hier wird es hässlich Das ist das leere Formular und steht auch so im Quelltext: <input name="vorname" size="20" maxlength="30" >....<input name="nachname" value="bitte ausfuellen" size="20" maxlength="30" >... Nach dem Ausfüllen des Formulars sendet der Browser: Vorname=Hans Nachname=Eckes Das sendet der Server an den Browser zurück:. <input name="vorname" value= Hans size="20" maxlength="30" >....<input name="nachname" value="eckes" size="20" maxlength="30" >...

Die Lösung Die <input...> Zeile darf nicht als String abgelegt werden. Sie wird beim Compilieren in ihre einzelnen Attribute zerlegt und wird beim Anzeigen der Seite wieder zusammengebaut. Vorteil: Values können aktualisiert werden Attribute wie checked oder selected können eingefügt werden Namen sind Forth-Worte, die sich um ihren Value und die Attributes selbst kümmern.

'name' hat noch einen Nebenjob Beim Anzeigen des Formulars: <input name="vorname" value= Hans size="20" maxlength="30" > Beim Übernehmen der Werte von POST: Vorname=Hans 30 $VARIABLE $VORNAME : Vorname ( ^str true <input false -- ) IF ( ^str ) \ jetzt kommt ein neuer Value von POST $VORNAME $! ELSE ( <input ) \ hier wird die Zeile <input... > angezeigt $VORNAME C@ 0<> IF $VORNAME!VALUE ELSE DROP THEN THEN ;

: ASSEMBLE.NAME ( <input -- ) DUP 0x24 + @ ( <input ^name ) FIND ( <input xt true <input ^name false ) IF ( <input xt ) OVER FALSE ROT ( <input <input flag xt ) EXECUTE ( <input ) DUP 0x24 + @ ( <input ^name ) THEN ( <input ^name ) <# \ baue ein name= Vorname zusammen [CHAR] " HOLD ( <input ^name ) $HOLD [CHAR] " HOLD " name=" $HOLD 0. #> ( <input addr len ) ADD.STRING ( <input ) DUP ASSEMBLE.VALUE ( <input ) DUP ASSEMBLE.CHECKED ( <input ) DUP ASSEMBLE.SELECTED ( <input ) DROP ;

und was ist mit JavaScript? <script src="test.js" type="text/javascript"> </script> <body background="textur.jpg". <input name="calc" type="button". onclick="anzeigen();">. </body>