35
1 Client-Side Web Programming (Part 1) Robert M. Dondero, Ph.D. Princeton University

Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

Embed Size (px)

Citation preview

Page 1: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

1

Client-SideWeb Programming

(Part 1)

Robert M. Dondero, Ph.D.Princeton University

Page 2: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

2

Objectives

You will learn about: Client-side web programming, alias... Programming the browser, via... Java Applets JavaScript

Page 3: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

3

Motivating Problem

Problem: In Pennypack app, missing author name is an error In principle, browser could:

Detect missing author name Warn user w/o contacting server

And thereby: Provide user feedback more quickly Reduce server load

Solution: Java Applets or JavaScript

Page 4: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

4

Part 1:Java Applets

Page 5: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

5

Java Applets

Applet Java code that is executed by a browser A subclass of JApplet

Which is a subclass of Applet Which is a subclass of Panel

Page 6: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

6

Java Applets History

Time line: Applets were part of initial version of JDK Applets ran in Sun's HotJava browser Applets ran in Netscape Navigator

Java became popular "The language of the Internet"

Page 7: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

7

Java Applets History

Time line (cont.): Netscape support lagged Microsoft adoption lagged

IE sometimes supported old versions IE sometimes didn't support Applets at all

Sun released browser "Java Plug-In" Enhanced many browsers to handle Applets

Page 8: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

8

PennypackAppletValidate App

See PennypackAppletValidate application book.py, database.py, common.py index.html searchform.cgi, searchform.py SearchApplet.java searchresults.cgi, searchresults.py

Some notes...

Page 9: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

9

PennypackAppletValidate App

Server side: Written in CGI/Python

Arbitrary Could have used CGI/Java, PHP, …

Still must validate form data!!! User might browse to searchresults.cgi directly

Page 10: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

10

PennypackAppletValidate App

searchform.py Generates page containing <applet> tag Applet tag commands browser to load specified

Applet class and create Applet object Must specify height and width of Applet Cannot resize Applet!!! Take your best guess!!!

Page 11: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

11

PennypackAppletValidate App

SearchApplet.java Similar to Swing application init() method instead of main() method applet.getAppletContext()

Returns the "context" of the Applet object; essentially the browser

applet.getAppletContext().showDocument(url) Uses URL object to command browser to fetch

page with given url Validates author upon event

Page 12: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

12

Part 2:JavaScript

Page 13: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

13

JavaScript

Who: Brendan Eichof Netscape

When: 1995 Why: client-side scripting

language for web pages

Page 14: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

14

JavaScript Overview

Client-side scripting language Embedded into HTML code Interpreted by Netscape browser, then all popular

browsers

Usage: <script> JavaScriptCode </script> <script src="url"></script> <sometag onSomeEvent ="JavaScriptCode">

Page 15: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

15

JavaScript vs. Java

JavaScript name was originally LiveScript Later changed to JavaScript to capitalize on

popularity of Java

JavaScript is related to Java only superficially

Page 16: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

16

The JavaScript Language

Yet another programming language!!! No time (and inappropriate) to cover thoroughly

See my personal "Subset of JavaScript" Link on web pages

Some simple examples that might help...

Page 17: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

17

JavaScript Examples

See hello1.html The <script> tag

See hello2.html Functions and function calls

See hello3.html Event handling Works partially in Firefox! Fails in Epiphany!! Welcome to client-side web programming!!!

Page 18: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

18

JavaScript Examples

See hello4.html and hello4.js JavaScript code stored externally Referenced by URL

Here a simple file name

See helloerror.html Error reporting In Firefox: Error Console (Tools → Error Console)

Page 19: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

19

JavaScript Examples

See control.html Control statements

See datastructures.html Data structures

Arrays Associative arrays

See objects.html Classes, object references, objects Unusual!

Page 20: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

20

JavaScript Global Objects

Constructors Boolean(), Number(), String(), Array(), Object(),

Function(), RegExp(), Date()

Errors Error(), EvalError(), RangeError(), ReferenceError(),

SyntaxError(), TypeError(), URIError()

Page 21: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

21

JavaScript Global Objects

Non-Constructor Functions decodeURI(), decodeURIComponent(),

encodeURI(), encodeURIComponent(), eval(), isFinite(), isNan(), parseFloat(), parseInt()

Other Infinity, Math, NaN, undefined

Page 22: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

22

JavaScript DOM

Document Object Model (DOM) A programmatic model of the current document Each element and attribute is represented as an

object Objects arranged in a tree

window document

Element (Sadly) Browser dependent

There is a standard, but some vendors don't observe

Page 23: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

23

JavaScript DOM (Gecko Engine)

window object Represents the browser window Important property: document Event handlers: onabort, onbeforeunload, onblur,

onchange, onclick, onclose, oncontextmenu, ondragdrop, onerror, onfocus, onhashChange, onkeydown, onkeypress, onkeyup, onload, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onmosbeforepaint, onpaint, onpopstate, onreset, onresize, onscroll, onselect, onsubmit, onunload, onpageshow, onpagehide

Page 24: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

24

JavaScript DOM (Gecko Engine)

document class Represents the current document. Contains

references to element objects Important methods: write(), getElementById() Event handlers: ononline, onoffline,

onreadystatechange

Page 25: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

25

JavaScript DOM (Gecko Engine)

element class Represents an HTML element Contains references to attributes and children

elements Event handlers: onafterscriptexecute,

onbeforescriptexecute, oncopy, oncut, onpaste, onbeforeunload, onblur, onchange, onclick, oncontextmenu, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onresize, onscroll

Specific elements have additional handlers

Page 26: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

26

JavaScript DOM

See printdomtree.html Recursively traverses DOM tree Prints rep of current document (Try printing contents of #text and #comment

nodes)

Page 27: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

27

JavaScript Events

See events.html Event handlers on <body> tag Event handlers on <form> tag Event handlers on <input> tag Ways to reference an object within the DOM

Page 28: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

28

JavaScript for Web Programming

Common uses of JavaScript in Web programming: Form input validation (now) AJAX (later) ...

Page 29: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

29

PennypackJavaScriptValidate

See PennypackJavaScriptValidate application book.py, database.py, common.py index.html searchform.cgi, searchform.py searchresults.cgi, searchresults.py

Some notes...

Page 30: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

30

PennypackJavaScriptValidate

Server side: Written in CGI/Python

Arbitrary Could have used CGI/Java, PHP, …

Still must validate form data!!! User might browse to searchresults.cgi directly

searchform.py Python multi-line string (''' … ''') Validates author upon form submission

Page 31: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

31

JavaScript Parting Thoughts

C/Java-like syntax Weakly typed Object-oriented

Unusual object model; very dynamic

Many incompatibilities among browsers DOM may vary JavaScript may vary! (HTML may vary!!)

Page 32: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

32

JavaScript Parting Thoughts

How to handle incompatibilities? Keep it simple Use a JavaScript generator

E.g. Google Web Toolkit Use a JavaScript library

E.g. JQuery

Page 33: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

33

Security in Client-Side Web Pgms

Java Applets and JavaScript: Run in a sandbox

Can perform only web-related tasks Cannot interact with local file system

Enforce same origin policy Code from one website cannot interact with

another website

Both allow exceptions to those policies

Page 34: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

34

Applets vs. JavaScript

Applet pros: Portable across (supporting) browsers More powerful

Java lang & libraries are more powerful than JavaScript lang & predefined objects & predefined classes

JavaScript pros: Launches faster Simpler Better integrated into browser (e.g. resizing)

Page 35: Client-Side Web Programming (Part 1) Overview Client-side scripting language ... Some notes... 30 PennypackJavaScriptValidate

35

Summary

We have covered: Client-side web programming, alias... Programming the browser, via... Java Applets JavaScript