530 likes | 639 Views
O Client (HTML / CSS / Javascript ). Agenda. Fundamentos HTTP HTML CSS Javascript AJAX. A Web. Era pra ser: Um sistema de obtenção de documentos “ hiperligados ” Documentos Sem estado Confiável Acadêmica. Acabou virando : A plataforma de informação global Aplicações
E N D
Desenvolvimento web com Java Agenda • Fundamentos • HTTP • HTML • CSS • Javascript • AJAX
Desenvolvimento web com Java A Web Era pra ser: • Umsistema de obtenção de documentos “hiperligados” • Documentos • Semestado • Confiável • Acadêmica Acabouvirando: • Aplataforma de informação global • Aplicações • Com estado • Insegura • Comercial
Desenvolvimento web com Java A Web ? Client Request Server Response
Desenvolvimento web com Java A Lasanha D E V E L O P E R D E P L O Y E R JEE APP Aplicação JSE APP APP Server Transporte APP Maquina Virtual Java Rede SistemaOperacional Enlace Dispositivos Rede Física
Desenvolvimento web com Java O HTTP
Desenvolvimento web com Java O HTTP
Desenvolvimento web com Java O HTTP
Desenvolvimento web com Java O HTTP
Desenvolvimento web com Java Exercício: Firebug
Desenvolvimento web com Java Navegadores • Interpretador de: • HTML • CSS • Javascript • RSS • … • XULFF • Extensões • Java Applets • Flash • … • ActiveXIE
Desenvolvimento web com Java HTML Hyper Text Markup Language Linguagem de Marcação de Hipertexto Sistema de interpretação de simbolos <rotulo>textomarcado</rotulo> Texto + links + audio + video + …
Desenvolvimento web com Java Exemplo
Desenvolvimento web com Java Tipos de Tags HTML 4.01 Spec (http://www.w3.org/TR/html4/), 9-18: • Text - Paragraphs, Lines, and Phrases • Lists - Unordered, Ordered, and Definition Lists • Tables • Links - Hypertext and Media-Independent Links • Objects, Images, and Applets • Style Sheets - Adding style to HTML documents • Alignment, font styles, and horizontal rules • Frames - Multi-view presentation of documents • Forms - User-input Forms: Text Fields, Buttons, Menus, and more • Scripts - Animated Documents and Smart Forms
Desenvolvimento web com Java HTML bem formado • Um único elemento raiz • <html>………..</html> • Abrir e fechar todas as tags • <p>…</p>, <br/> • Capitalização consistente • <DIV></DIV> • Aninhamento correto • <b><i>negrito E italico</i></b> • Atributos não repetidos com valor entre aspas • <img src=“…” />
Desenvolvimento web com Java Semântica x apresentação
Desenvolvimento web com Java CSS Cascading Style Sheets Folhas de estilo em cascata Linguagem de apresentação de documentosestruturados Aplicadashierarquicamente
Desenvolvimento web com Java HTML Semântico
Desenvolvimento web com Java Usando CSS
Desenvolvimento web com Java estilo.css Seletor de Tag Regra Seletor de Classe Seletor de Filhos Seletor de Pseudoclasse Seletor de ID
Desenvolvimento web com Java Exemplo: CSS Zen Garden
Desenvolvimento web com Java Diferenças entre navegadores • Cada versão de navegador interpreta como quer • Progamar para o padrão ou para o usuário? • CSS Hacks • Comentários condicionais • Bibliotecas • Testes http://www.webdevout.net/browser-support-css
Desenvolvimento web com Java Exercício: Web Developer Extensions
Desenvolvimento web com Java Javascript • A linguagemmais popular emenoscompreendida do mundo. • JavaLivescript • Funcional / OO? • Problemas de projeto, implementação, documentação, padronizaçãoeuso. Douglas Crockford http://developer.yahoo.com/yui/theater/ http://www.crockford.com/
Desenvolvimento web com Java Idéiasprincipais • Implantação “load and go” • Tipagemdinâmica • Objetosgenéricos • Herançaporprotótipos • Lambda (funçõescomoobjetos) • “Linkage” porvariáveisglobais • Coleta de lixo (mark and sweep)
Desenvolvimento web com Java Valores • Number (double) • Math.* • String (16 bit UCS2) • Imutáveis • Booleans • Falsy: false, null, undefined, “”, 0, NaN. O restoétruthy. • Objects • Arrays [] • Date • RegExp • null • undefined • NaN
Desenvolvimento web com Java Exercícios • Entendendo a IEEE-754 (double) • DiferenciandovaloresTruthy/Falsy
Desenvolvimento web com Java Object • Mapanome/valor (Hashtable) • Nãoordenado • Nomessãorotulosou strings • Valorespodem ser de qualquertipo (Number, String, Object, function ….) • Object Literal varobj = {nome:”Fulano”, ‘idade’:21}; varnome = obj.nome; varidade = obj[‘idade’]; • ParametrosNomeados myFunc({param1:value1,…}) • Incremento de Objetos obj.novaProp = “voilà”;
Desenvolvimento web com Java Objects Construção: • {} • new Object() function object(o){ Function(){} F.prototype = o; return new F(); } object(Object.prototype) Remoção: • object[param] = undefined • delete object[param] Prototypes: • Object.prototype • Array.prototype • Function.prototype • Number.prototype • String.prototype • Boolean.prototype
Desenvolvimento web com Java Linkage varnome = pessoaFisica.nome; // “Fulano” pessoaFisica.novaPropriedade = “uala”; pessoaFisica.situação += 1; • Classes • Métodos • Construtores • Modulos • Funções
Desenvolvimento web com Java Exercício • Adicionandoométodo “trim” à strings
Desenvolvimento web com Java Expressõeseoperadores Statements • label: break • for (;;) • for (var name in obj) • hasOwnProperty • switch (expression) • Strings OK • throw / try / catch • with • Function / return; • var Operators • + / + / + • ==, != / === , !== • && (guard) • return a && a.member; • || (default) • varqtd = param || 10; • &, |, ^, >>, >>>, << • typeof
Desenvolvimento web com Java Functions • Funçõessãoobjetos varf = function(){…} f.nome = “Fatorial” • Inner functions: function externa(){ varx = 10; function interna(){ alert(x); } interna(); } externa(); • Closures function undead(){ var message = ”Ola"; function speak(){ alert(message); } setTimeout(speak,3000); } alert("Antes"); undead(); alert("Depois"); • {Blocos} nãodefinemescopo • Globaisimplicitas
Desenvolvimento web com Java Exercícios • Usandofunçõescomoobjetos: calculadoragenérica • Entendendofunçõesinternase closures • Evitandoproblemas de escopo
Desenvolvimento web com Java Functions • Nãoexisteverificação de quantidadeoutipo dos argumentos • Tipos de invocação (this and that) • func(args) • obj.func(args) • new func(args) • func.apply(obj,[args]) • arguments • eval(string)
Desenvolvimento web com Java Exercício • Adicionando Curry • F(x,y) returns z • curry(F,x) = G(y) returns z • uncurry(G,x) = F(x,y)
Desenvolvimento web com Java Estilo • Muitoimportante, especialmenteemjavascript. • Sugestões: • Escrevacódigolegívelporhumanos • Use ; e {} • Cuidado com espaços, quebras de linhas, virgulas, =/==/===, etc… • Defina as variáveis no iníciodafunção http://javascript.crockford.com/code.html
Desenvolvimento web com Java O Navegador
Desenvolvimento web com Java O Navegador
Desenvolvimento web com Java O DOM <html> <head> <title>Oi DOM</title> </head> <body> <p>OiMundo</p> </body> </html> • document.getElementById(id) • document.getElementsByName(name) • node.getElementsByTagName(tag) HTML HEAD TITLE TEXT BODY P TEXT
Desenvolvimento web com Java Exercício: Ondeestáo bug? function calc() { i = txtI.value; n = txtN.value; x = txtX.value; resultado.value = (x * Math.pow(1 + i, n)).toFixed(2); }
Desenvolvimento web com Java DOMWalker function walkTheDOM(node, func) { func(node); node = node.firstChild; while (node) { walkTheDOM(node, func); node = node.nextSibling; } }
Desenvolvimento web com Java Exercício • Percorrendoecontando tags
Desenvolvimento web com Java Exemplos • img.src = “http://url.da.outra.img”; • img.setAttribute(“src”, “http://url.da.outra.img”); • node.className += “ selected”; • p.style.color = “blue”; var table = document.getElementById('table0'); var row = table.insertRow(-1); var cell, text; for (vari=0; i<2; i++) { cell = row.insertCell(-1); text = 'Row ' + row.rowIndex + ' Cell ' + i; cell.appendChild(document.createTextNode(text)); }
Desenvolvimento web com Java Exercício • Consultando a API do DOM • http://developer.mozilla.org/en/docs/Main_Page • http://www.w3schools.com/Dom/dom_mozilla_vs_ie.asp
Desenvolvimento web com Java Eventos • Mouse • click • Dblclick • mouseover … • Form • blur • Focus • keydown.. • Handlers • node[“onxxxx”] = f(e) • e = e || event • target = e.target || e.srcElement • e.cancelBoubble = true: If(e.stopPropagation){ e.stopPropagation() } • E.returnValue = false; if ( e.preventDefault){ e.preventDefault(); } Return false; ! Leak ! Event Handlers no IE6 (refcounts)
Desenvolvimento web com Java Mashups
Desenvolvimento web com Java Asynchronous JavascriptAnd XML • Request / callback • XMLHttpRequest • Content-type: • XML • JSON • Javascript • Text • Comet function createXMLHttpRequest() { try { return new XMLHttpRequest(); } catch(e) {} try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {} try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} alert("XMLHttpRequest not supported"); return null; } ... varxhReq = createXMLHttpRequest(); xhReq.open("GET", "sumGet.phtml", true); xhReq.onreadystatechange = onSumResponse; xhReq.send(null); ... function onSumResponse() { if (xhReq.readyState != 4) { return; } varserverResponse = xhReq.responseText; ... } http://ajaxpatterns.org
Desenvolvimento web com Java Exercício • Obtendo dados do servidorassíncronamente
Desenvolvimento web com Java Padrões de Projeto Clássicos • Classes • Singletons • Privileged / public • Modules / Packages • Chaining Javascript • Power Constructor • Prototypal Inheritance • Parasitic Inheritance • Lazy Functions