Web Engineering Web Technologies III Lecture XI – 16th December 2008 Federico M. Facca © Copyright 2008 STI - INNSBRUCK www.sti-innsbruck.at Where are we? # Date Title Lecturer 1 7th Oct Web Engineering Introduction and Overview F. M. Facca 2 14h Oct Collection Requirements for Web Applications F. M. Facca 3 21st Oct Web Application Modeling F. M. Facca 4 28th Oct Developing Applications with WebML F. M. Facca 5 4th Nov Web Application Architectures I F. M. Facca 6 11th Nov Web Application Architectures II F. M. Facca 7 18th Nov Testing and Usability on the Web F. M. Facca 8 25th Nov Mid Term Exam F. M. Facca 9 2nd Dec Web Technologies I F. M. Facca 10 9th Dec Web Technologies II F. M. Facca 11 16th Dec Web Technologies III F. M. Facca 12 13th Jan Web 2.0 Mash-ups F. Daniel (UNITN) 13 20th Jan Web Application Development Process/ Project Management for Web Applications F. M. Facca 14 27th Jan Final Exam F. M. Facca Web Engineering (703512) 2 Overview • Javascript for modifying HTML • AJAX • WRAP-UP Web Engineering (703512) 3 Something we have not seen about it: page manipulation JAVASCRIPT FOR MODIFYING HTML Web Engineering (703512) 4 Hello World <html> <body> <script type="text/javascript"> document.write(“<h1>Hello World!</h1>"); </script> </body> </html> Web Engineering (703512) DOM treatment of the page Document URL <html> <body> The URL of this document is: <script type="text/javascript"> document.write(document.URL); </script> </body> </html> Web Engineering (703512) 6 Form Validation <html> <head> <script type="text/javascript"> function validate() …(next slide) </script> </head> <body> <form action="tryjs_submitpage.htm" onsubmit="return validate()"> Name (max 10 chararcters): <input type="text" id="fname“ size="20"><br /> Age (from 1 to 100): <input type="text" id="age" size="20"><br /> E-mail: <input type="text" id="email" size="20"><br /> <input type="submit" value="Submit"> </form> </body> </html> Web Engineering (703512) Form Validation (Cont.) <script type="text/javascript"> function validate() { var at=document.getElementById("email").value.indexOf("@"); var age=document.getElementById("age").value; var fname=document.getElementById("fname").value; submitOK="true"; if (fname.length>10){ alert("The name must be less than 10 characters"); submitOK="false"; } if (isNaN(age)||age<1||age>100) { alert("The age must be a number between 1 and 100"); submitOK="false"; } if (at==-1) { alert("Not a valid e-mail!"); submitOK="false"; } if (submitOK=="false") { return false; } } </script> Web Engineering (703512) DOM Objects JavaScript Function Object Property Introducing the “push” paradigm in Web applications ASYNCHRONOUS JAVASCRIPT AND XML Web Engineering (703512) 9 Where Were We Before AJAX? • Static pages give the illusion of interactivity through standard form submissions. • Form submissions result in full page loads. Web Engineering (703512) 10 So, What’s The Problem? • Many actions only manipulate small portions of the page but the entire page must be reloaded. • Server responses contain the entire page content rather than just the portion being updated. • Loading entire pages typically results in several additional HTTP requests for images, style sheets, scripts, and any other content that may be on the page. Web Engineering (703512) 11 AJAX - Asynchronous JavaScript and XML • An interface that allows for the HTTP communication without page refreshment. • Web pages are loaded into an object within the script (e.g., JavaScript) execution and integrated with the page content. • Thus, the Web page can communicate with the server without refreshing the whole page. Web Engineering (703512) 12 Why Use Ajax • Enhance user experience – Increases usability, speed, interactivity – Makes it possible to update portions of a web page without reloading the entire page – Asynchronous—user does not have to wait for server to respond Web Engineering (703512) Real-Life Examples of AJAX Apps • Google maps – http://maps.google.com/ • Goolgle Suggest – http://www.google.com/webhp?complete=1&hl=en • Gmail – http://gmail.com/ • Yahoo Maps (new) – http://maps.yahoo.com/ • Many more… Web Engineering (703512) 14 Ajax Example: Google Suggest • Uses data about the overall popularity of various searches to help rankings • Does not base suggestions on an individual’s personal search history Web Engineering (703512) Why Use Ajax? • Ajax applications usable on many different – Operating systems – Browsers – Computer architectures • The web standards that Ajax uses (XHTML, CSS, JavaScript, XML) are well defined, and supported by all major browsers. Web Engineering (703512) How Does Ajax Work • JavaScript communicates directly with the server, using the XMLHttpRequest object (or ActiveXObject, IE 5 & 6) • Data retrieved from the server can be in a variety of formats: XML, HTML, text files Web Engineering (703512) HTTP Requests: Traditional Model • Traditional JavaScript: – Make html form • use GET or POST to communicate with the server – User clicks “Submit” button to send or receive information – User waits • for the server to respond • for a new page to load with the results Web Engineering (703512) Traditional Model Source: http://www.openajax.org/member/wiki/Technical_Overview_Whitepaper Web Engineering (703512) Ajax web application model Source: http://www.adaptivepath.com/ideas/essays/archives/000385.php Web Engineering (703512) HTTP Requests: Using Ajax • JavaScript communicates directly with the server, via the JavaScript XMLHttpRequest object (or ActiveXObject, IE 5 & 6) • With XMLHttpRequest, the web page can make a request/get a response from web server without reloading • The user can remain on the same page, not noticing that scripts request pages or send data to a server in the background Web Engineering (703512) XMLHttpRequest • API that JavaScript and other web browser scripting languages use to transfer XML and other data between a web page’s client and server side • Data returned from XMLHttpRequest calls is often provided by back-end databases. Web Engineering (703512) XMLHttpRequest Object History • Microsoft Internet Explorer version 5 – ActiveX object • Mozilla 1.0 added it as a native object with a compatible API. • Apple added it to Safari in version 1.2 Web Engineering (703512) What Technologies Does Ajax Use? • a combination of: – XHTML (or HTML) – Cascading Style Sheets (CSS) – Document Object Model manipulated using JavaScript to display and interact dynamically with the information presented – The XMLHttpRequest object to exchange data asynchronously with the web server Web Engineering (703512) JavaScript • Define an object for sending HTTP requests • Initiate request – – – – get request object designate a response handler function initiate a GET or POST request send data • Handle response – wait for readyState of 4 and HTTP status of 200 – extract return text with responseText or responseXML – do something with result • E.g., use innerHTML to insert result into designated element Web Engineering (703512) Ajax Fundamentals • Ajax uses a three-step process: 1. 2. 3. Request a URL from JavaScript code on the client. Handle the URL on the server and write to the response. After the response is complete, integrate the response into the DOM (Document Object Model). – In an Ajax request we don't refresh the entire page; instead, we update only part of the page. Web Engineering (703512) The Server side • Did we reduce the load on the server? • Ajax newcomers sometimes mistakenly believe that Ajax, because it provides a more responsive user interface, reduces server-side traffic. • In fact, Ajax applications typically have more serverside traffic because each Ajax request involves a trip to the server. – Because those requests are asynchronous, however, Ajax creates the perception of a more responsive UI, though it typically does not reduce the load on the server. Web Engineering (703512) 27 So, How Does It Work? • JavaScript is used to: – Create and control instances of the XMLHttpRequest (XHR) object. – Provide handlers for responses. – Manipulate the DOM. • The XMLHttpRequest object: – Allows scripts to perform HTTP client functionality. – Supports GET and POST operations. Web Engineering (703512) 28 Launching HTTP Requests • Typically, 3 steps are required: 1. Construct and configure an XMLHttpRequest object 2. Launch the request 3. Process the response Web Engineering (703512) 29 Constructing an XMLHttpRequest For Mozilla: var request = new XMLHttpRequest(); For Microsoft Explorer: var request = new ActiveXObject("Microsoft.XMLHTTP"); Web Engineering (703512) Configuring an XMLHttpRequest request.open("method","URL",false) • method is GET, POST, etc. • URL must be in the domain of the current (or a relative URL), for security reasons • The false will be discussed later request.setRequestHeader("header","value") Web Engineering (703512) 31 Launching the Request request.send(content ) • content is the posted in a POST request • content can be "null" or empty Web Engineering (703512) Reading the Response request.responseText • The response as flat text request.responseXML • The response as a (DOM) Document object • Available if response Content-Type is text/XML request.status request.statusText request.getAllResponseHeaders() request.getResponseHeader("header") Web Engineering (703512) An Example <html> <head> <title>Jokes</title> <script type="text/javascript"> ... 2 slides ahead ... </script> </head> Web Engineering (703512) An Example (Cont.) <body onload="init(); setJoke()"> <h1>Select a Joke:</h1> <p><select onchange="setJoke(value)"> <option value="1" selected="selected">Joke 1</option> <option value="2">Joke 2</option> <option value="3">Joke 3</option> </select></p> <div id="jokediv"></div> </body> </html> Web Engineering (703512) An Example (Cont.) <script type="text/javascript"> var jDiv; function init() { jDiv = document.getElementById("jokediv");} function setJoke(value) { request = new XMLHttpRequest(); request.open("GET","joke"+value+".txt",false); request.send(null); if(request.status==200){jDiv.innerHTML=request.responseText;} else {jDiv.innerHTML = "<i>Cannot load joke...</i>";} } </script> Web Engineering (703512) What if we didn’t get yet the response in this stage? Example (Cont.) • Our examples use “false" in the third parameter of open(). – This parameter specifies whether the request should be handled asynchronously. • True means that the script continues to run after the send() method, without waiting for a response from the server. Web Engineering (703512) 37 Asynchronous Requests • Reading of a Web page can take a long time during which the browser is blocked • Solution: launch the request asynchronously • That is, the execution continues after send is called without waiting for it to complete request.open("method","URL",true) • When the request is completed, a predefined function is called Web Engineering (703512) 38 XMLHttpRequest States • The XMLHttpRequest goes through several states: 0 not initialized 1 loading 3 interactive 2 loaded 4 complete • In the request configuration, you can define a function to call upon state change: request.onreadystatechange = functionName Web Engineering (703512) 39 XMLHttpRequest States (Cont.) • Use request.readyState to get the current state of the request • Use request.abort() to stop the request Web Engineering (703512) 40 Asynchronous Example var request; function setJoke(value) { request = new XMLHttpRequest(); request.open("GET","joke"+value+".txt",true); request.onreadystatechange = updateJokeDiv; request.send(null); } Web Engineering (703512) An Example (Cont.) function updateJokeDiv() { if(request.readyState<4) { jokeDiv.innerHTML = "<i>Loading...</i>"; return; } if(request.status==200) { jokeDiv.innerHTML = request.responseText; } else { jokeDiv.innerHTML = "<i>Cannot load joke!</i>"; } } Web Engineering (703512) Integrating AJAX and XML using DOM • The next example shows how XML data can be parsed and added into the content of your page Web Engineering (703512) 43 XML+AJAX Example <html> <head><title>Country List</title> <script type="text/javascript"> … </script> </head> <body onload="init();loadCountries()"> <h1>Select a Continent:</h1> Web Engineering (703512) 44 XML+AJAX Example (Cont.) <p> <select id="continenetList“ onchange="loadCountries()"> <option value="asia">Asia</option> <option value="africa">Africa</option> <option value="europe">Europe</option> </select> </p> <p><select size="10" id="countryList"></select></p> </body> </html> Web Engineering (703512) XML+AJAX Example (Cont.) function init() { continents = document.getElementById("continenetList"); countries = document.getElementById("countryList"); } function loadCountries() { var xmlURL = "countries-"+continents.value+".xml"; var request = new XMLHttpRequest(); request.onreadystatechange = updateCountries (); request.open("GET",xmlURL,true); request.send(null); Web Engineering (703512) } XML+AJAX Example (Cont.) function updateCountries() { if(request.readyState==4) { while(countries.length>0){countries.remove(0);} if(request.status==200) { var names = request.responseXML.getElementsByTagName("name"); for(var i=0; i<names.length; ++i) { option = document.createElement("option"); option.text=option.value= names[i].firstChild.nodeValue; countries.appendChild(option); } } } } Web Engineering (703512) AJAX: Potential Drawbacks • • • • "Back" function of browser might not work as expected Bookmarking a particular state of the application Navigation may be difficult User might not notice when small parts of the page change • Search engine tracking • If user disables JavaScript • Many web analytics programs may not track Ajax actions as they do page reloads Web Engineering (703512) That’s almost all for day… WRAP-UP Web Engineering (703512) 49 Bibliography • Mandatory reading – W3Schools Ajax Tutorial http://www.w3schools.com/Ajax/Default.Asp Web Engineering (703512) 50 The Eclipse Web Tools Platform (WTP) • Extends the Eclipse platform with tools for developing Web and Java EE applications. • Includes source and graphical editors for a variety of languages, – wizards and built-in applications to simplify development, – tools and APIs to support deploying, running, and testing apps. – built in CVS support • http://www.eclipse.org/webtools/ Web Engineering (703512) AJAX Toolkit Framework (ATF) • Currently developmental • Goal: build extensible frameworks containing features for developing, deploying, debugging and testing AJAX applications. • Tools will include: – enhanced JavaScript editing features such as edit-time syntax checking – an embedded Mozilla web browser – an embedded DOM browser – an embedded JavaScript debugger – additional AJAX development tooling • http://www.eclipse.org/atf/ Web Engineering (703512) Assignments • It’s a compulsory team assignment – Up to 12 points (as always extras are possible) • You have to implements the system you modeled in the previous assignment • Suggested technology: Jsp + Java Bean • Deadline 13th January • Provide (in separate zip files): – Manual – Code – Deployable application (if I cannot manage to deploy it, then I cannot evaluate it) Web Engineering (703512) 53 Next Lecture # Date Title Lecturer 1 7th Oct Web Engineering Introduction and Overview F. M. Facca 2 14h Oct Collection Requirements for Web Applications F. M. Facca 3 21st Oct Web Application Modeling F. M. Facca 4 28th Oct Developing Applications with WebML F. M. Facca 5 4th Nov Web Application Architectures I F. M. Facca 6 11th Nov Web Application Architectures II F. M. Facca 7 18th Nov Testing and Usability on the Web F. M. Facca 8 25th Nov Mid Term Exam F. M. Facca 9 2nd Dec Web Technologies I F. M. Facca 10 9th Dec Web Technologies II F. M. Facca 11 16th Dec Web Technologies III F. M. Facca 12 13th Jan Web 2.0 Mash-ups F. Daniel (UNITN) 13 20th Jan Web Application Development Process/ Project Management for Web Applications F. M. Facca 14 27th Jan Final Exam F. M. Facca Web Engineering (703512) 54 Questions? Web Engineering (703512) 55