O Client (HTML / CSS / Javascript) Desenvolvimento web com Java Agenda • • • • • • Fundamentos HTTP HTML CSS Javascript AJAX #2 Desenvolvimento web com Java 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 • Com estado • Insegura • Comercial #3 Desenvolvimento web com Java A Web Client Request ? Server Response #4 Desenvolvimento web com Java APP Aplicação APP Server Transporte Maquina Virtual Java Sistema Operacional Dispositivos Rede Rede Enlace DEPLOYER JSE APP JEE APP DEVELOPER A Lasanha Física #5 Desenvolvimento web com Java O HTTP #6 Desenvolvimento web com Java O HTTP #7 Desenvolvimento web com Java O HTTP #8 Desenvolvimento web com Java O HTTP #9 Desenvolvimento web com Java Exercício: Firebug # 10 Desenvolvimento web com Java Navegadores Interpretador de: – HTML – CSS – Javascript – RSS – … – XULFF Extensões – Java Applets – Flash – … – ActiveXIE # 11 Desenvolvimento web com Java HTML Hyper Text Markup Language Linguagem de Marcação de Hipertexto Sistema de interpretação de simbolos <rotulo>texto marcado</rotulo> Texto + links + audio + video + … # 12 Desenvolvimento web com Java Exemplo # 13 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 # 14 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=“…” /> # 15 Desenvolvimento web com Java Semântica x apresentação # 16 Desenvolvimento web com Java CSS Cascading Style Sheets Folhas de estilo em cascata Linguagem de apresentação de documentos estruturados Aplicadas hierarquicamente # 17 Desenvolvimento web com Java HTML Semântico # 18 Desenvolvimento web com Java Usando CSS # 19 Desenvolvimento web com Java estilo.css Seletor de Tag Regra Seletor de Classe Seletor de Filhos Seletor de Pseudoclasse Seletor de ID # 20 Desenvolvimento web com Java Exemplo: CSS Zen Garden # 21 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 # 22 Desenvolvimento web com Java Exercício: Web Developer Extensions # 23 Desenvolvimento web com Java Javascript • A linguagem mais popular e menos compreendida do mundo. • JavaLivescript • Funcional / OO? • Problemas de projeto, implementação, documentação, padronização e uso. Douglas Crockford http://developer.yahoo.com/yui/theater/ http://www.crockford.com/ # 24 Desenvolvimento web com Java Idéias principais • Implantação “load and go” • Tipagem dinâmica • Objetos genéricos • Herança por protótipos • Lambda (funções como objetos) • “Linkage” por variáveis globais • Coleta de lixo (mark and sweep) # 25 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 # 26 Desenvolvimento web com Java Exercícios • Entendendo a IEEE-754 (double) • Diferenciando valores Truthy/Falsy # 27 Desenvolvimento web com Java Object • Mapa nome/valor (Hashtable) • Não ordenado • Nomes são rotulos ou strings • Valores podem ser de qualquer tipo (Number, String, Object, function ….) • Object Literal var obj = {nome:”Fulano”, ‘idade’:21}; var nome = obj.nome; var idade = obj[‘idade’]; • Parametros Nomeados myFunc({param1:value1,…}) • Incremento de Objetos obj.novaProp = “voilà”; # 28 Desenvolvimento web com Java Objects Prototypes: Construção: • • • • • • • {} • new Object() function object(o){ Function(){} F.prototype = o; return new F(); } object(Object.prototype) Object.prototype Array.prototype Function.prototype Number.prototype String.prototype Boolean.prototype Remoção: • object[param] = undefined • delete object[param] Desenvolvimento web com Java Linkage pessoaFisica CPF 123.456.789-00 Idade 21 pessoa Nome “Fulano” Situação 1 var nome = pessoaFisica.nome; // “Fulano” pessoaFisica.novaPropriedade = “uala”; pessoaFisica.situação += 1; •Classes •Métodos •Construtores •Modulos •Funções # 30 Desenvolvimento web com Java Exercício • Adicionando o método “trim” à strings # 31 Desenvolvimento web com Java Expressões e operadores 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) – var qtd = param || 10; • &, |, ^, >>, >>>, << • typeof # 32 Desenvolvimento web com Java Functions • Funções são objetos var f = function(){…} f.nome = “Fatorial” • Inner functions: function externa(){ var x = 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ão definem escopo # 33 • Globais implicitas Desenvolvimento web com Java Exercícios • Usando funções como objetos: calculadora genérica • Entendendo funções internas e closures • Evitando problemas de escopo # 34 Desenvolvimento web com Java Functions • Não existe verificação • eval(string) de quantidade ou tipo dos argumentos • Tipos de invocação (this and that) – func(args) – obj.func(args) – new func(args) – func.apply(obj,[args]) • arguments # 35 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) # 36 Desenvolvimento web com Java Estilo • Muito importante, especialmente em javascript. • Sugestões: – Escreva código legível por humanos – Use ; e {} – Cuidado com espaços, quebras de linhas, virgulas, =/==/===, etc… – Defina as variáveis no início da função # 37 http://javascript.crockford.com/code.html Desenvolvimento web com Java O Navegador Fetch URL Parse Cache Flow Tree Paint Display List Pixels # 38 Desenvolvimento web com Java O Navegador Flow Paint Script Event # 39 Desenvolvimento web com Java O DOM <html> <head> <title>Oi DOM</title> </head> <body> <p>Oi Mundo</p> </body> </html> HTML • document.getElementById(id) • document.getElementsByName(name) • node.getElementsByTagName(tag) HEAD TITLE TEXT BODY P # 40 TEXT Desenvolvimento web com Java Exercício: Onde está o bug? function calc() { i = txtI.value; n = txtN.value; x = txtX.value; resultado.value = (x * Math.pow(1 + i, n)).toFixed(2); } # 41 Desenvolvimento web com Java DOMWalker function walkTheDOM(node, func) { func(node); node = node.firstChild; while (node) { walkTheDOM(node, func); node = node.nextSibling; } } # 42 Desenvolvimento web com Java Exercício • Percorrendo e contando tags # 43 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 (var i=0; i<2; i++) { cell = row.insertCell(-1); text = 'Row ' + row.rowIndex + ' Cell ' + i; cell.appendChild(document.createTextNode(text)); } # 44 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 # 45 Desenvolvimento web com Java Eventos • Mouse – click – Dblclick – mouseover … • Form – blur – Focus – keydown.. ! Leak ! Event Handlers no IE6 (refcounts) • 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(); } # 46 Return false; Desenvolvimento web com Java Mashups # 47 Desenvolvimento web com Java Asynchronous Javascript And 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; } ... var xhReq = createXMLHttpRequest(); xhReq.open("GET", "sumGet.phtml", true); xhReq.onreadystatechange = onSumResponse; xhReq.send(null); ... function onSumResponse() { if (xhReq.readyState != 4) { return; } var serverResponse = xhReq.responseText; ... } # 48 http://ajaxpatterns.org Desenvolvimento web com Java Exercício • Obtendo dados do servidor assíncronamente # 49 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 # 50 Desenvolvimento web com Java Bibliotecas • • • • • • • • • Prototype jQuery YUI Dojo Script.aculo.us Mootools X Rico G*? “Modus-operandi” no cliente: 1. O que funciona 2. O que é comum 3. O que é padrão # 51 Desenvolvimento web com Java Resumo • HTTP é o idioma em que o servidor web e o navegador escrevem mensagens um pro outro. • HTML é a linguagem para definição de páginas. • Quanto mais do visual puder ser definido fora do documento usando CSS, mais flexível ele será. • Javascript é uma linguagem para definir interações e manipular a representação interna da página (DOM). • É possivel obter novos dados ou pedaços de página sem re-enviar a página usando um objeto XMLHttpRequest. Esta técnica chama-se AJAX. # 52 Desenvolvimento web com Java Dúvidas? # 53