Download presentation
Presentation is loading. Please wait.
Published byDaniella Andrews Modified over 9 years ago
1
6 Feb 2002PL Day1 Programming Interactive Web Scripts Matthias Felleisen PLT
2
6 Feb 2002PL Day2 PLT principles of program design –introductory –script development principles of programming languages –design –analysis –correctness programming environments & tools
3
6 Feb 2002PL Day3 PLT: First Session principles of program design –introductory –script development: dynamic Web content principles of programming languages –design –analysis –correctness programming environments & tools
4
6 Feb 2002PL Day4 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
5
6 Feb 2002PL Day5 Dynamic Web Content Technology: Programming, Contents Programming first: –CGI –Java Servlets Contents first –Active Server Pages –Java Server Pages
6
6 Feb 2002PL Day6 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?
7
6 Feb 2002PL Day7 The Common Gateway Interface
8
6 Feb 2002PL Day8 http://www.ccs.neu.edu/cgi-bin/goto.pl
9
6 Feb 2002PL Day9 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.
10
6 Feb 2002PL Day10 Interactive Web Scripts: Hello World (printf "My First CGI Page~n”) (printf "Hello World") Plain Program (output-http-headers) (write-xml/content (xexpr->xml '(html (title "My First CGI Page") (body "Hello World")))) Web Script
11
6 Feb 2002PL Day11 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")))))))
12
6 Feb 2002PL Day12 Interactive Web Scripts: Multiply-by-10.com (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))))) (define (get-number) (printf "Enter a number ") (flush-output) (read)) (printf "Multiply-by-10.com") (printf "the result is: ~a" (* (get-number) 10) )
13
6 Feb 2002PL Day13 Interactive Web Scripts: Multiply-by-10.com Multiply-by-10.com Multiply <form method="get" action="http://www..../mult-by-10.ss"> Enter a number Where do babies come from?
14
6 Feb 2002PL Day14 Interactive Web Scripts: Multiply-by-10.com
15
6 Feb 2002PL Day15 Interactive Web Scripts: Multiply.com (output-http-headers) … (write-xml/content (xexpr->xml `(html (title "Multiply.com") (body "the result is: ",(* (get-number) (get-number)))))) (define (get-number) (printf "Enter a number ") (flush-output) (read)) (printf "Multiply.com") (printf "the result is: ~a" (* (get-number) (get-number)) )
16
6 Feb 2002PL Day16 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.
17
6 Feb 2002PL Day17 Interactive Web Scripts: DontMultipy.com The natural structure of an interactive Web program doesn’t work naturally with the Common Gateway Interface.
18
6 Feb 2002PL Day18 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”.
19
6 Feb 2002PL Day19 Interacting with Web Scripts
20
6 Feb 2002PL Day20 Interacting with Web Scripts
21
6 Feb 2002PL Day21 Interacting with Web Scripts
22
6 Feb 2002PL Day22 Interacting with Web Scripts And now we go BACK:
23
6 Feb 2002PL Day23 Interacting with Web Scripts
24
6 Feb 2002PL Day24 Interactive Web Scripts: Multiply.com Multiply Multiply <form method="get" action="http://www..../multiply.ss"> Enter a number
25
6 Feb 2002PL Day25 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"])))))))
26
6 Feb 2002PL Day26 Interactive Web Scripts: Multiply.com Multiply Multiply <form method="get" action="http://www..../multiply.ss"> Enter the second number
27
6 Feb 2002PL Day27 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))))))))
28
6 Feb 2002PL Day28 Interactive Web Scripts and Continuations (define multiply (lambda (x y) (* x y))) (define multiply (lambda (x) (lambda (y) (* x y)))) (define multiply-by-22 (lambda (y) (* 22 y)))
29
6 Feb 2002PL Day29 Interactive Web Scripts and Continuations cgi scriptconsumer cgi scriptconsumer the back button
30
6 Feb 2002PL Day30 Interactive Web Scripts and Continuations cgi scriptconsumer cgi scriptconsumer the back button cloning
31
6 Feb 2002PL Day31 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
32
6 Feb 2002PL Day32 PLT’s Interactive GUI Scripts Generalize this technique to certain GUI programs. Graunke and Krishnamurthi, ICSE 2002. Graunke PL Day 2002.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.