Co, gdzie, jak, kiedy? kiedy co gdzie jak jak I jeszcze trochę jak

Podobne dokumenty
TECHNOLOGIE SIECI WEB

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Architektury Usług Internetowych. Laboratorium 2 RESTful Web Services

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Zaawansowane aplikacje internetowe

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Podstawy programowania w języku JavaScript

Programowanie w Sieci Internet filtry oraz web.xml. Kraków, 11 stycznia 2013 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Czym jest AJAX. AJAX wprowadzenie. Obiekt XMLHttpRequest (XHR) Niezbędne narzędzia. Standardowy XHR. XHR z obsługą baz danych

akademia androida Składowanie danych część VI

Plan wykładu. 1. Protokół FTP. 2. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Programowanie warstwy klienta w aplikacji JavaEE

Zaawansowane aplikacje internetowe laboratorium REST

Elementy JEE. 1. Wprowadzenie. 2. Prerekwizyty. 3. Pierwszy servlet. obsługa parametrów żądań 4. JavaServer Pages.

Podstawowe wykorzystanie Hibernate

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

HttpRequest Aplikacja Czat

Wstęp. Ale po co? Implementacja

Pogadanka o czymś, co niektórzy nazywają AJAX

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

MVC w praktyce tworzymy system artykułów. cz. 1

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Zaawansowane aplikacje internetowe laboratorium

XML extensible Markup Language. część 5

Wykład 03 JavaScript. Michał Drabik

Programowanie w języku Java. Bazy danych SQLite w Javie

Architektury Usług Internetowych. Laboratorium 1 Servlety

Metody dostępu do danych

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Paweł Rajba,

Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

PHP: bloki kodu, tablice, obiekty i formularze

JavaScript obiektowość

Laboratorium 10 - Web Services

Angular, cz. II. Tworzenie serwisów Web 2.0. dr inż. Robert Perliński

Jak okiełznać frontend w Django? Piotr Maliński

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

prepared by: Programowanie WWW Servlety

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Przykład połączenie z bazą danych

Architektury Usług Internetowych. Laboratorium 1. Servlety

I.Wojnicki, Tech.Inter.

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

NoSQL Not Only SQL: CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Przetwarzanie dokumentów i widoków.

OpenPoland.net API Documentation

Tworzenie i wykorzystanie usług

Google Web Toolkit. Piotr Findeisen

Google Web Toolkit Michał Węgorek ZPO 2009

Instrukcja obsługi User s manual

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

Wybrane działy Informatyki Stosowanej

How to share data from SQL database table to the OPC Server? Jak udostępnić dane z tabeli bazy SQL do serwera OPC? samouczek ANT.

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Zrąb JavascriptMVC. Krzysztof Płocharz. 6 kwiecień Uniwersytet Warszawski

EPI: Interfejs Graficzny Wykład nr 4 Podstawy frameworku Rails

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Wybrane działy Informatyki Stosowanej

Serwlety Java: zagadnienia zaawansowane. Data Sources. Data Sources. Przykład pliku data-sources.xml

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 2).

Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX

Zaawansowane aplikacje WWW - laboratorium

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

PHP: bazy danych, SQL, AJAX i JSON

Budowa nowoczesnej aplikacji SPA z wykorzystaniem biblioteki Ember.js

Remote Method Invocation 17 listopada 2010

Bezpieczeństwo frameworków WEBowych Java na przykładzie ataku XSS

Katalog książek cz. 2

JQuery. $('#pierwszy').css('color','red').hide('slow').show(3000); $(document).ready(function() { //... tutaj nasze skrypty jquery //...

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Programowanie obiektowe

W tej części dowiemy się, jak rozszerzyć WordPress za pomocą JSON-API. Oto kilka rzeczy, które będziemy robić z wtyczką JSON-API:

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Programowanie obiektowe

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Pierwszy program. else1 <html> <body> <script type="text/javascript"> var d = new Date()

Podejście obiektowe do budowy systemów rozproszonych

JavaScript - korzenie

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Kurs języka Ruby. Ruby on Rails ActionPack

Bazy Danych i Usługi Sieciowe

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Aplikacje WWW - laboratorium

Dokumentacja techniczna API systemu SimPay.pl

Programowanie w Ruby

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Podstawy JavaScript ćwiczenia

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Wprowadzenie do języka Java

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

[Android] Podstawy programowania

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

PHP 5 język obiektowy

Programowanie obiektowe zastosowanie języka Java SE

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

XML extensible Markup Language. część 5

Db4o obiektowa baza danych wersja.net

Transkrypt:

AJAX

Co, gdzie, jak, kiedy? kiedy co gdzie jak jak I jeszcze trochę jak

kiedy/gdzie/co czyli trochę historii

Aaa!!! We re in the 90 s!!! stare dobre (albo złe a może jeszcze inne?) www Microsoft? That s impossible, Holmes! a jednak

Coś tu się rusza powolutku, niemrawo pojawiają się kolejne strony i wtedy nadchodzi Google (konkretniej GMail, za chwilkę Maps)

AJAX: A New Approach to Web Applications 18 luty 2005 (!) artykułjasse Jamesa Garretta, adaptive path pierwsze zdefiniowanie pojęcia AJAX Asynchronous JavaScript + XML

Gdzie jest kot pogrzebany? słowo klucz: asynchronous

Więcej http://www.adaptivepath.com/publications/essa ys/archives/000385.php

jak cz. 1, czyli czysty JavaScript

You wanna get dirty? jak każda fajna technologia, nie daje się w tym pisać! write once, run anywhere? akurat xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp = new XMLHttpRequest(); xmlhttp = window.createrequest();

Dirty, dirty, dirty var xmlhttp=false; /*@cc_on @*/ /*@if (@_jscript_version >= 5) // JScript gives us Conditional compilation, we can cope with old IE versions. // and security blocked creation of the objects. try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); catch (E) { xmlhttp = false; @end @*/ if (!xmlhttp && typeof XMLHttpRequest!='undefined') { try { xmlhttp = new XMLHttpRequest(); catch (e) { xmlhttp=false; if (!xmlhttp && window.createrequest) { try { xmlhttp = window.createrequest(); catch (e) { xmlhttp=false;

Mamy XMLHttpRequest jest lepiej xmlhttp.open("get", "test.txt",true); xmlhttp.onreadystatechange=function() { if (xmlhttp.readystate==4) { alert(xmlhttp.responsetext) xmlhttp.send(null) co możemy dostać? normalny tekst xmlhttp.responsetext xml xmlhttp.responsexml (ale serwer musi wysłać dane jako mime: text/xml)

Info + linki http://www.xulplanet.com/references/objref/xmlhttpreque st.html http://developer.apple.com/internet/webcontent/xmlhttpre q.html http://jibbering.com/2002/4/httprequest.html http://www.sitepoint.com/article/remote scripting ajax

jak cz. 2, czyli prototype.js

Welcome back to the XXI century w3.org twierdzi, że JavaScript jest językiem obiektowym bez enkapsulacji? bez dziedziczenia? próba zrobienia z JavaScriptu czegoś chociaż zbliżonego do języka obiektowego

Podstawy obiektowości Class.create(); MyClass = Class.create(); MyClass.prototype = { initialize: function(a, b) { this.a = a; this.b = b; this.secondfunc();, secondfunc: function(){ this.t = 'secondlife'; var mc = new MyClass("foo", "bar"); alert(mc.t)

Prawie rodzina Object.extend(dst, src) obja = {name: "Joe", age: "12"; objb = {name: "Tom"; Object.extend(objA, objb); alert(obja.name); // "Tom" obja = {name: "Joe", age: "12"; objc = Object.extend({, obja); obja = {name: "Joe", age: "12", car:{make: "Honda"; objc = Object.extend({, obja); objc.car.make = "Toyota"; alert(obja.car.make); // "Toyota" obja = {name: "Joe", age: "12"; objc = Object.extend(objA, {name: "Tom"); objd = Object.extend(objA, {name: "Jim"); alert(objc.name); // "Tom" alert(objd.name); // "Jim" alert(obja.name); // "Jim"

Czyżby czyżyk? Kolekcje? Enumerable, Array, Hash $A(obj); $H(obj); iteratory each, select, invoke, find, etc. // alerts "a is at 0" then "b is at 1" then "c is at 2" ["a", "b", "c"].each(function(item, index) { alert(item + " is at " + index); ); // [80,50] [1, 80, 3, 50].select(function(item) { return (item > 20); );

AJAX Ajax.Request(url, opts) url normalny adres opts ogólnie dowolny obiekt, o ile posiada pola: method parameters asynchronous onxxx (XXX Loaded, Complete, Success, Failure, )

Ajax.Request(); new Ajax.Request('/foo/bar', {method:'post', postbody:'thisvar=true&thatvar=howdy'); var handlerfunc = function(t) { alert(t.responsetext); var errfunc = function(t) { alert('error ' + t.status + ' ' + t.statustext); new Ajax.Request('/foo/bar', {parameters:'thisvar=true&thatvar=howdy', onsuccess:handlerfunc, onfailure:errfunc); var opt = { method: 'post', postbody: 'thisvar=true&thatvar=howdy&theothervar=2112', onsuccess: function(t) { alert(t.responsetext);, on404: function(t) { alert('error 404: location "' + t.statustext + '" was not found.');, onfailure: function(t) { alert('error ' + t.status + ' ' + t.statustext); new Ajax.Request('/foo/bar', opt);

Ajax.Updater sam zmienia wskazany element new Ajax.Updater(container, url, options); container id, element lub obiekt z polami success i failure reszta bez zmian

Jak działa new Ajax.Updater('mydiv', '/foo/bar', {asynchronous:true, evalscripts:true); // this will evaluate any scripts in <script></script> blocks. <script src="/scripts/prototype.js" type="text/javascript"></script> <script language="javascript" type="text/javascript"> var ajax; function mydate() { ajax = new Ajax.Updater( 'datestr', // DIV id must be declared before the method was called 'date.cgi', // URL { // options method:'get' ); </script> date is now: <div id="datestr">n/a</div> <script language="javascript" type="text/javascript"> mydate(); </script>

I jeszcze jedna Ajax.PeriodicalUpdater(container, url, options) gdzie jest częstotliwość wykonywania???

Działanie new Ajax.PeriodicalUpdater('mydiv', '/foo/bar', {asynchronous:true, frequency:2); fajna opcja: decay new Ajax.PeriodicalUpdater('mydiv', '/foo/bar', {asynchronous:true, frequency:2, decay:2);

I teraz to już ostatnia rzecz Ajax.Responders rejestrowanie funkcji do wszystkich wywołań AJAX. Ajax.Responders.register({ oncreate : showloader, oncomplete : hideloader );

Przydatne stronki http://www.sergiopereira.com/articles/prototype.js.html http://wiki.script.aculo.us/scriptaculous/show/prototype http://www.sitepoint.com/article/painless javascriptprototype http://encytemedia.com/blog/articles/2005/12/07/prototy pe meets ruby a look at enumerable array and hash http://www.snook.ca/archives/000531.php http://particletree.com/features/quick guide toprototype/

jak cz. 3, czyli trochę o niczym

script.aculo.us po prawdzie bardziej biblioteka efektów niż biblioteka AJAXu bazuje na prototype.js (kiedyś była wewnątrz prototype), bardzo często widziane razem

Warto wiedzieć test units gotowa strona do pobrania, odpala testy Test.Unit.Runner() Test.Unit.TestCase słaba dokumentacja, ale (podobno) duże możliwości

Link http://script.aculo.us/

i znowu jak cz. 4, która znowu nic nowego nie wniesie

Rico oparty na prototype.js zawiera dużą kolekcję efektów inne podejście do AJAXu

3 kroki do AJAXu powiedzieć, co zrobić w momencie żądania co zrobić z odpowiedzią wywołaćżądania dla podanych zdarzeń

Czym się różni ustalony format odpowiedzi z serwera możliwość zawarcia w jednej fizycznej odpowiedzi kilku logicznych.

Tradycyjnie link http://openrico.org/rico/home.page

inne podejście czyli część, której nie będzie

Ruby on Rails pełny zrąb do tworzenia aplikacji webowych oparty na prototype szybko zdobywający rynek

Co takiego fajnego? całkowicie oparty na Rubym w pełni obiektowy wbudowane mechanizmy łączności w bazami danych wbudowana możliwość AJAXu Convention over Configuration

Convention over Configuration z góry ustalone zasady nadawania nazw: nazw plików nazwy klas i metod tabele w bazie danych umiejscowienia plików MVC brak plików konfiguracyjnych

Must-see http://www.rubyonrails.org/ http://www.onlamp.com/pub/a/onlamp/2005/0 6/09/rails_ajax.html http://poignantguide.net/ruby/

a może jednak Java? czyli część ostatnia

DWR tworzony tylko i wyłącznie z myślą o AJAXie mapowanie Javy z serwera do JavaScriptu u klienta (!) wymaga kontenera serwletów na serwerze

Co zrobić, żeby działało ściągnąć dwr.jar i zainstalować w katalogu WEB INF/lib zmodyfikować plik WEB INF/web.xml oraz dodać plik WEB INF/dwr.xml wejść na adres [serwer]/[webapp]/dwr, powinna się pokazać lista udostępnionych klas

No to szybko zrobimy czat :D nasza strona: <p>messages:</p> <div id="chatlog"></div> <p> Your Message: <input id="text"/> <input type="button" value="send" onclick="sendmessage()"/> </p>

Co na serwerze? dwie klasy: public class Chat { public List addmessage(string text) { if (text!= null && text.trim().length() > 0) { messages.addfirst(new Message(text)); while (messages.size() > 10) { messages.removelast(); return messages; public List getmessages() { return messages; static LinkedList messages =new LinkedList(); public class Message { public Message(String newtext) { text = newtext; if (text.length() > 256) { text = text.substring(0, 256); text = text.replace('<', '['); text = text.replace('&', '_'); public long getid() { return id; public String gettext() { return text; long id = System.currentTimeMillis(); String text;

Konfigurujemy serwer najlepsza metoda programowania copy&paste <servlet> <servlet name>dwr invoker</servlet name> <display name>dwr Servlet</display name> <servlet class>uk.ltd.getahead.dwr.dwrservlet</servlet class> <init param> <param name>debug</param name> <param value>true</param value> </init param> </servlet> <servlet mapping> <servlet name>dwr invoker</servlet name> <url pattern>/dwr/*</url pattern> </servlet mapping> <?xml version="1.0" encoding="utf 8"?> <!DOCTYPE dwr PUBLIC " //GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd"> <dwr> <allow> <create creator="new" javascript="chat"> <param name="class" value="[your.package].chat"/> </create> <convert converter="bean" match="[your.package].message"/> </allow> </dwr>

Działaj strono, działaj dodajemy JavaScript <script type='text/javascript' src='/[your WEB APP]/dwr/engine.js'></script> <script type='text/javascript' src='/[your WEB APP]/dwr/interface/Chat.js'></script> <script type='text/javascript' src='/[your WEB APP]/dwr/util.js'></script> co siedzi w Chat.js? Chat.addMessage = function(callback, p0) {... Chat.getMessages = function(callback) {...

Ostatnie szlify dwie małe funkcje function sendmessage() { var text = DWRUtil.getValue("text"); DWRUtil.setValue("text", ""); Chat.addMessage(gotMessages, text); function gotmessages(messages) { var chatlog = ""; for (var data in messages) { chatlog = "<div>" + messages[data].text + "</div>" + chatlog; DWRUtil.setValue("chatlog", chatlog);

Link http://getahead.ltd.uk/dwr/ http://today.java.net/pub/a/today/2005/08/25/ dwr.html

koniec