330 likes | 569 Views
Programming Interactive Web Scripts. Matthias Felleisen PLT. PLT. principles of program design introductory script development principles of programming languages design analysis correctness programming environments & tools. PLT: First Session. principles of program design
E N D
Programming Interactive Web Scripts Matthias Felleisen PLT PL Day
PLT • principles of program design • introductory • script development • principles of programming languages • design • analysis • correctness • programming environments & tools PL Day
PLT: First Session • principles of program design • introductory • script development: dynamic Web content • principles of programming languages • design • analysis • correctness • programming environments & tools PL Day
Dynamic Web Content • USA Today says: “… more than half the pages on the Web are generated on demand.” (July 2000) • Why? • connection to up-to-date database • determining consumer information • on-line experiments • games PL Day
Dynamic Web Content • Technology: Programming, Contents • Programming first: • CGI • Java Servlets • Contents first • Active Server Pages • Java Server Pages PL Day
Dynamic Web Content • What is a CGI script? a servlet? How do they work? Why is it difficult to design interactive ones? • Can we automate their development? • What does this teach us about GUI dialogues in general? PL Day
The Common Gateway Interface PL Day
Interactive Web Scripts • Some URLs point to programs. • The server invokes the program, which writes a page to the standard output port and then terminates. • The server sents the page to the client that requested the URL. PL Day
Interactive Web Scripts: Hello World Web Script (output-http-headers) (write-xml/content (xexpr->xml '(html (title "My First CGI Page") (body "Hello World")))) Plain Program (printf "My First CGI Page~n”) (printf "Hello World") PL Day
Interactive Web Scripts: Server Status (output-http-headers) (write-xml/content (xexpr->xml `(html (title "Server Status") (body ,(read-line (first (process "uptime"))))))) (printf "Server Status: ~a~n" (read-line (first (process "uptime"))))))) PL Day
Interactive Web Scripts: Multiply-by-10.com (define (get-number) (printf "Enter a number ") (flush-output) (read)) (printf "Multiply-by-10.com") (printf "the result is: ~a" (* (get-number) 10) ) (output-http-headers) (define (get-number) (get-binding ‘NUM (bindings))) (write-xml/content (xexpr->xml `(html (title "Multiply-by-10.com") (body "the result is: " ,(* (get-number) 10))))) PL Day
Interactive Web Scripts: Multiply-by-10.com Where do babies come from? <html> <head><title>Multiply-by-10.com</title></head> <body> <h1>Multiply</h1> <form method="get" action="http://www. .../mult-by-10.ss"> Enter a number <input type="text" name= "NUM" value="0"> </form> </body> </html> PL Day
Interactive Web Scripts: Multiply.com (define (get-number) (printf "Enter a number ") (flush-output) (read)) (printf "Multiply.com") (printf "the result is: ~a" (* (get-number) (get-number)) ) (output-http-headers) … (write-xml/content (xexpr->xml `(html (title "Multiply.com") (body "the result is: " ,(* (get-number) (get-number)))))) PL Day
Interactive Web Scripts: DontMultiply.com • A CGI script terminates after producing a page. • To query the consumer, the script must produce a page with a form. • Ergo: To interact, a CGI program must terminate. PL Day
Interactive Web Scripts: DontMultipy.com The natural structure of an interactive Web program doesn’t work naturally with the Common Gateway Interface. PL Day
Interactive Web Scripts: Interaction • Current solution: programmers invert program by hand. • A program with N interaction points becomes a set of N programs. • The programs communicate all necessary data “manually”. PL Day
Interacting with Web Scripts PL Day
Interacting with Web Scripts PL Day
Interacting with Web Scripts PL Day
Interacting with Web Scripts And now we go BACK: PL Day
Interacting with Web Scripts PL Day
Interactive Web Scripts: Multiply.com <html> <head><title>Multiply</title></head> <body> <h1>Multiply</h1> <form method="get" action="http://www. .../multiply.ss"> Enter a number <input type="text" name= "NUM" value="0"> </form> </body> </html> PL Day
Interactive Web Scripts: cgi-first.ss (output-http-headers) (write-xml/content (xexpr->xml `(html (title "The Multiply Page") (body `(form ([method "get"][action "http://.../cgi-second.ss"]) (p "Enter the second number") (input ([type "hidden"][name "first"] [value ,(get-number)])) (input ([type "text"] [name "second"][value "1"]))))))) PL Day
Interactive Web Scripts: Multiply.com <html> <head><title>Multiply</title></head> <body> <h1>Multiply</h1> <form method="get" action="http://www. .../multiply.ss"> Enter the second number <input type="text" name= "second" value="0"> <input type= "hidden" name= "first" value= ”XXXXXX."> </form> </body> </html> PL Day
Interactive Web Scripts: cgi-second.ss (output-http-headers) (write-xml/content (xexpr->xml `(html (title "The Multiply Page") (body "the result is: " ,(* (get-number 'first) (get-number ’NUM)))))))) PL Day
Interactive Web Scripts and Continuations (define multiply (lambda (x) (lambda (y) (* x y)))) (define multiply-by-22 (lambda (y) (* 22 y))) (define multiply (lambda (x y) (* x y))) PL Day
Interactive Web Scripts and Continuations cgi script cgi script consumer consumer the back button PL Day
Interactive Web Scripts and Continuations cgi script consumer cgi script consumer the back button cloning PL Day
PLT’s Interactive Web Script • Solution 1: Design Web server that supports coroutining. Use continuation objects. Graunke et al. ESOP 2001 • Solution 2: Design transformation that automatically inverts programs with N interaction points into N programs. Graunke et al. ASE 2001 & Jacob Matthews PL Day 2002 PL Day
PLT’s Interactive GUI Scripts • Generalize this technique to certain GUI programs. • Graunke and Krishnamurthi, ICSE 2002. Graunke PL Day 2002. PL Day