programação avançada para internet parte 1

43
Programação Avançada para Internet Profº. Felipe A. Lopes [email protected]

Upload: felipe-alencar

Post on 25-Jul-2015

129 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Programação Avançada para Internet PARTE 1

Programação Avançada para Internet

Profº. Felipe A. [email protected]

Page 2: Programação Avançada para Internet PARTE 1

Programação Avançada para Internet

OBJETIVO: Desenvolver aplicações voltadas para a Internet criando páginas web dinâmicas que acessam base de dados utilizando a tecnologia Servlets/JSP da linguagem de programação Java.

Profº. Felipe A. [email protected]

Page 3: Programação Avançada para Internet PARTE 1

Programação Avançada para Internet

BIBLIOGRAFIA:Java, Servlets e JSP – Muhki, Sonal e Kotecha, Neha Makron BooksTODO, Nick; SKOLKOWSKI, Mark. Java Server Pages – O Guia do Desenvolvedor. Ed. Campus.

The Java Tutorials – Oracle SiteTOFFOLI, Giulio. The Definitive Guide to iReport. Ed. Apress.

Nota do professor:Google

Profº. Felipe A. [email protected]

Page 4: Programação Avançada para Internet PARTE 1

Programação Avançada para Internet(PAVI – Curso de Férias 2015)

PARTE 1:Fundamentos da Arquitetura Web para JSP e Servlets

Profº. Felipe A. [email protected]

Page 5: Programação Avançada para Internet PARTE 1

Objetivos

• Esta primeira parte fornece uma visão geral da plataforma Web– Arquitetura cliente-servidor– Protocolo de comunicação HTTP

• Descrever o funcionamento do HTTP e as principais tecnologias para Web development

• Apresenta as tecnologias de Java para a Web: servlets e JSP

• Define o ambiente de desenvolvimento: Tomcat

Page 6: Programação Avançada para Internet PARTE 1

A Web como plataforma

• A Web é baseada no HTTP (RFC 2068)– Protocolo simples para transferência de

mensagens, arquivos, etc.– Stateless (não mantém sessão aberta)

Cliente

ServidorHTTP

Faz uma requisião:GET /index.html HTTP/1.1...

Abre uma conexão para www.abc.com:80

Envia uma resposta:HTTP/1.1 200 OK....

Fecha a conexãoIndex.html

Page 7: Programação Avançada para Internet PARTE 1

Cliente e servidor HTTP

• Servidor HTTP– Gerência do sistema virtual de arquivos e diretórios

– Mapeamento de pastas do sistema de arquivos local (e.g., c:/htdocs) para diretórios virtuais (e.g., 127.0.0.1/) acessíveis remotamente (notação de URI)

• Atribuições do servidor HTTP– Interpretar requisições HTTP do cliente (e.g., métodos GET, POST)

– Devolver resposta HTTP para a saída padrão (e.g., código de resposta 200, 404, 403)

• Papel do cliente HTTP– Enviar requisições HTTP (GET, POST, HEAD) a um servidor

• Requisições contém a URI do recurso remoto, cabeçalhos RFC 822 e, opcionalmente, dados (se método o HTTP for POST)

– Processar repostas HTTP recebidas (interpretação de cabeçalhos, tipos de dados, e repassá-los

Page 8: Programação Avançada para Internet PARTE 1

Principais métodos para HTTP request

• GET – é uma solicitação ao servidor HTTP de um arquivo (informando sua URI absoluta, relativa à raiz do servidor)GET <uri> <protocolo>/<versão><Cabeçalhos HTTP>: <valores> (RFC 822)<linha em branco>–GET pode submeter dados através da URI (tamanho limitado)

<uri>?dados–Método HEAD é semelhante ao GET mas o servidor não devolve a página, apenas o cabeçalho

• POST – submete dados ao servidor (como fluxo de bytes)POST <uri> <protocolo>/<versão><Cabeçalhos HTTP>: <valores><linha em branco><dados>

Page 9: Programação Avançada para Internet PARTE 1

Cabeçalhos HTTP

• Na requisição (request), as informações seguem do cliente ao servidor– E.g., fabricante e nome do browser, data da cópia em cache, cookies

válidos para o domínio e caminho da URL da requisição, etc.host: www.google.com.brmethod: GETscheme: http

• Na resposta (response), as informações seguem do servidor para o cliente– E.g., tipo de dados dos conteúdos (e.g., text/xml, image/jpeg) e

tamanho, cookies para criar, endereço de redirecionamento.Content-type: text/html; charset-iso-8859-1Refresh: 15; url=/pages/index.htmlContent-length: 246

Page 10: Programação Avançada para Internet PARTE 1

Comunicação HTTP: detalhes

1. Cliente recebe uma página HTML<img src=“google.jpg” />

2. Request: Browser solicita uma imagemGET google.jpg HTTP/1.1User-Agent: Mozilla 7.0 [en] (Windows 95; I)Cookies: query=img; SessionID=D23612312345

3. Response: servidor envia cabeçalho e streamHTTP 1.1 200 OK

Server: Apache 1.32

Date: Friday, August 13, 2003 03:12:56 GMT-03

Content-type: image/jpg

Content-length: 23779

!#JPG89~¾ 7 .55.a 6¤Ü4 ...

Interpreta HTML

Gera GETrequest

Linha embrancofinaliza

cabeçalhos

google.jpg

Page 11: Programação Avançada para Internet PARTE 1

SSL – Secure Sockets Layer

• É uma camada adicional na comunicação HTTP para introduzir criptografia

• Browser e servidor precisam suportar o padrão SSL para que a transação seja segura

• Porta default: 443

I

InternetCliente HTTP

Servidor HTTP

https:/ /dx.com/pay.asp

Página Segura

Esta página é segura. Digite sua senha e cartão de crédito:

2806 1989

2806 1989

Navegador SSL

~¾ 7 55.a

2806 1989

SSL

<h1>Página

segura...

<h1>Página

segura...

Æz+Ä~W6

®¾ $.8.x

Servidor HTTP

/pay.asp

Page 12: Programação Avançada para Internet PARTE 1

Serviços Web: funções

• Serviço de informações– Finalidade: publicação de informações, multimídia– Interatividade: limitada a hipertexto– Tecnologias (estáticas): HTML, CSS

• Serviço de aplicações locais (client-side)– Finalidade: oferecer interatividade ao cliente– Interatividade: limitada pela aplicação cliente– Tecnologias (dinâmicas): JavaScript, applets Java, ActiveX

• Serviço de aplicações cliente-servidor– Finalidade: interface para aplicações no servidor– Interatividade: limitada pela aplicação e servidor Web– Tecnologias (dinâmicas): CGI, ASP, PHP, Servlets, JSP

Page 13: Programação Avançada para Internet PARTE 1

Serviço de Informações: Tecnologias de Apresentação

• HTML 4.0 (HyperText Markup Language)– Coleção de marcadores usados para formatar texto:

<h2>Cabeçalho estilo h2</h2><p>Primeiro parágrafo</p>

– Nada diz sobre aparência (browser do cliente decide)

– Define apenas estrutura e conteúdo

– HTML 5? (Consulte o material no site da disciplina)

<!-- Procure saber quem é Tim Berners-Lee -->

• CSS (Cascading Style Sheets)– Lista de regras de apresentação para página ou conjunto de páginas

(linguagem declarativa)

– Depende da estrutura do HTML, define formas, aparência

– CSS 3? (Consulte o material no site da disciplina

• ƒ Padrões W3C (http://www.w3.org)

Page 14: Programação Avançada para Internet PARTE 1

HTML – HyperText Markup Language

• Utilizada para definir a interface do usuário Web• Pode ser usada na

– Especificação da estrutura do texto de uma página (que o browser posteriormente formatará com uma folha de estilos)

– Inclusão de imagens em uma página

– Inclusão de vínculos (links) para outras páginas

– Construção de uma interface com formulários para envio de dados ao servidor

– Base de aplicações que rodam dentro do browser (applets Java, plug-ins, vídeos, etc.)

Page 15: Programação Avançada para Internet PARTE 1

CSS – Cascading Style Sheets

• Linguagem utilizada para declarar folhas de estilo que podem ser aplicadas em páginas HTML– Define aparência (forma) da página– Permite posicionamento de textos, imagens; customização de

fontes, cores, etc.

• Regras de estilo são colocadas em arquivo de texto com extensão .css:h1, h2 { color: rgb(81%, 9%, 39%) font-size: 50pt; margin-top: 1.5cm}p.citacao {font-family: Times, serif; font-weight: 100}

Page 16: Programação Avançada para Internet PARTE 1

Limitações: HTML e CSS

• HTML e CSS são linguagens declarativas, interpretadas pelo browser para definir apenas a forma como informação será organizada e apresentada

• Não são programáveis• Os formulários criados com HTML não fazem nada

(eles precisam ser vinculados a uma aplicação)• Não é possível construir aplicações Web interativas*

utilizando apenas CSS e HTML• Dynamic HTML (DHTML) e HTML5: solução para

alguns problemas de apresentação, estrutura e interatividade

Page 17: Programação Avançada para Internet PARTE 1

Serviço de aplicações: Tecnologias dinâmicas

• Lado-cliente (client-side)– Linguagens de extensão: JavaScript, VBScript– Plug-ins e componentes (applets, activeX)– Soluções integradas: DHTML

• Persistência de sessão cliente-servidor– Cookies, SGBD

• Lado-servidor (server-side)– CGI, plug-ins do servidor e componentes– Linguagens de extensão: ASP, JSP, PHP

Page 18: Programação Avançada para Internet PARTE 1

Tecnologias lado-cliente (client-side)

• Extensão da funcionalidade básica do browser• Permitem a criação de uma interface do usuário

dinâmica– Tratamento de eventos– Alteração dinâmica do conteúdo e/ou apresentação– Realização de comandos condicionais, cálculos e computação– Disponibilizam recursos não disponíveis no browser

• Principais tecnologias– Extensões do HTML (scripts): JavaScript, VBScript, linguagens

proprietárias– Extensões do browser (componentes): Applets, ActiveX, plug-

ins

Page 19: Programação Avançada para Internet PARTE 1

Tecnologias lado-cliente (client-side): extensões do HTML

• Forma mais flexível de estender o HTML– Código geralmente fica visível na página:<head><script language="JavaScript"><!-- function subtraia(a, b) { return a - b; }//--></script></head>

• Linguagens de script mais populares– VBScript: baseado na sintaxe do Visual Basic. MSIE-only.– JavaScript/JScript: sintaxe semelhante a de Java

• Código é interpretado diretamente pelo browser (e não por uma máquina virtual, como ocorre com os applets)

Page 20: Programação Avançada para Internet PARTE 1

Tecnologias lado-cliente (client-side): JavaScript

• JavaScript não é uma versão limitada de Java• Possui sintaxe semelhante, mas é interpretada e bem menor que

Java• JavaScript pode ser usada no browser ou no servidor. A linguagem

possui duas partes:– Núcleo (padrão ECMA chamado de ECMAScript)

– Modelo de objetos do documento (quando usada no browser) ou do servidor (quando usada no servidor em tecnologias ASP, Livewire, etc.)

• Implementa padrão DOM

• O núcleo da linguagem define as estruturas de programação, sintaxe e objetos de propósito geral

• Quando usa-se JavaScript no browser, várias estruturas do HTML são objetos acessíveis, o que permite a manipulação dessas estruturas com JavaScript

Page 21: Programação Avançada para Internet PARTE 1

JavaScript e DOM

• O Document Object Model (DOM) do JavaScript mapeia algumas estruturas do HTML com objetos da linguagem

– Propriedades dos objetos e elementos da página podem ser alterados em tempo de execução

– O mapeamento restringe-se a elementos de formulário, vínculos, imagens e atributos da janela do browser.

– O DOM permite validação de campos dos formulários, cálculos, imagens dinâmicas, abertura de novas janelas, controle de frames embutidos, etc.

• Não é completa. Não mapeia parágrafos, títulos ou folhas de estilo– Essa restrição é contornada pelo DOM dos navegadores e da W3C

Page 22: Programação Avançada para Internet PARTE 1

DHTML – Dynamic HTML

• DHTML combina uma linguagem de programação (geralmente JavaScript) com HTML e CSS

– Permitindo tratar eventos em qualquer lugar da página– Permitindo grande interatividade– Permitindo alteração dinâmica de conteúdo, estrutura e aparência

• DOM - Document Object Model é a ponte entre o HTML/CSS e a linguagem baseada em objetos

P { color: red; }

<h1 id=”um”> ... </h1><p id=”x”> ... </p><img src=”fig1.jpg”/>

document.all.x.style.color = ‘blue’;document.images[0].src = ‘fig1.jpg’;

HTML = document

BODY = document.all

Conteúdo e forma DOM Javascript/ JScript

HTM

LCS

S

Page 23: Programação Avançada para Internet PARTE 1

Tecnologias lado-servidor (server-side)

• Estendem as funções básicas de servidor HTTP, alguns exemplos:– CGI - Common Gateway Interface– APIs: ISAPI, NSAPI, Apache API, Servlet API– Scripts: ASP, JSP, Cold Fusion, PHP

• Rodam do lado do servidor, portanto, não dependem de suporte por parte dos navegadores– Os browsers fornecem apenas a interface do usuário

• Interceptam o curso normal da comunicação– Recebem dados via requisições HTTP (GET e POST)– Devolvem dados através de respostas HTTP

Page 24: Programação Avançada para Internet PARTE 1

Tecnologias lado-servidor (server-side):CGI – Common Gateway Interface

• Especificação que determina como construir uma aplicação que será executada pelo servidor Web

• Programas CGI podem ser escritos em qualquer linguagem de programação. A especificação limita-se a determinar os formatos de entrada e saída dos dados (HTTP).

• O que interessa é o programa ser capaz de:– Obter dados de entrada a partir de uma requisição HTTP

– Gerar uma resposta HTTP incluindo os dados e parte do cabeçalho

• Escopo: camada do servidor– Não requer nenhuma função adicional do cliente ou do HTTP

CGIRequisição

HTTPResposta

HTTP

Page 25: Programação Avançada para Internet PARTE 1

Tecnologias lado-servidor (server-side):CGI – Common Gateway Interface

• Programas CGI podem ser escritos em qualquer linguagem de propósito geral.

– As linguagens mais populares são C e Perl.

• A linguagem usada deve ter facilidades para– Ler variáveis de ambiente (onde o servidor armazena informações passadas no

cabeçalho da requisição).– Imprimir dados de 8 bits (e não apenas texto ASCII)

• Linguagens não recomendadas– Java: dificuldade de ler propriedades do sistema– MS-DOS: impossibilidade de gerar HTML

• Segurança depende do servidor e do código

Page 26: Programação Avançada para Internet PARTE 1

Tecnologias lado-servidor (server-side):CGI – Common Gateway Interface

• Servidor HTTP pode intermediar, através da interface CGI, qualquer aplicação rodando na máquinaservidora

• Browser não precisa defuncionalidade especial (deve ao menos suportar HTML)

Servidor deBanco de Dados

CGI

Servidor HTTP Browser

Page 27: Programação Avançada para Internet PARTE 1

Tecnologias lado-servidor (server-side):CGI – Common Gateway Interface

• CGI é prático, mas ineficiente!• A interface CGI requer que o servidor sempre execute um programa

– Um novo processo do S.O. rodando o programa CGI é criado para cada cliente remoto que o requisita

– Novos processos consomem muitos recursos, portanto, o desempenho do servidor diminui conforme os clientes se conectam

• CGI roda como um processo externo, logo, não tem acesso a recursos do servidor– A comunicação com o servidor é resumida a entrada e saída

– É difícil o compartilhamento de dados entre processos

Page 28: Programação Avançada para Internet PARTE 1

Tecnologias lado-servidor (server-side):APIs do servidor

• Podem substituir totalmente o CGI, com vantagens:– Toda a funcionalidade do servidor pode ser usada

– Múltiplos clientes em processos internos (threads)

– Muito mais rápidas e eficientes (menos overhead)

• Desvantagens:– Em geral dependem de plataforma, fabricante e linguagem

– Soluções proprietárias

• Exemplos:– ISAPI (Microsoft)

– NSAPI (Netscape)

– Apache Server API

Page 29: Programação Avançada para Internet PARTE 1

Tecnologias lado-servidor (server-side):APIs do servidor

Page 30: Programação Avançada para Internet PARTE 1

Tecnologias lado-servidor (server-side):Servlet API

“Servlet é um “servidorzinho”...”•A Servlet API é independente de plataforma e praticamente independente de fabricante•Componentes desta API são escritos em Java e se chamam servlets

– Assim como os componentes SAPI proprietários, os servlets rodam dentro do servidor, mas em uma Máquina Virtual Java (JVM)

•Disponível como ‘plug-in’ ou conector para servidores que não suportam a API diretamente

Page 31: Programação Avançada para Internet PARTE 1

Tecnologias lado-servidor (server-side):Vantagens dos servlets

• Com relação ao CGI– Rodam como parte do servidor (cada nova requisição inicia um novo thread mas

não um novo processo)– Mais integrados ao servidor: mais facilidade para compartilhar informações,

recuperar e decodificar dados enviados pelo cliente, etc.

• Com relação às APIs proprietárias– Não dependem de único servidor ou sistema operacional– Têm toda a API Java à disposição (JDBC, RMI, etc.)– Não comprometem a estabilidade do servidor em caso de falha (na pior

hipótese, um erro poderia derrubar o JVM)

Page 32: Programação Avançada para Internet PARTE 1

Tecnologias lado-servidor (server-side):Problemas dos servlets, CGI e Server APIs

• Para gerar páginas dinâmicas (99,9% das aplicações), é preciso embutir o HTML dentro de instruções de uma linguagem de programação:out.print("<h1>Servlet exemplo</h1>");for (int num = 1; num <= 5; i++) { out.print("<p>Parágrafo " + num + "</p>");}out.print("<table><tr><td> ... </tr></table>");

• Maior parte da informação da página é estática, porém, precisa ser embutida no código

• Afasta o Web designer do processo–Muito mais complicado programar do que usar HTML e JavaScript–O design de páginas geradas dinamicamente acaba ficando a cargo do programador

Page 33: Programação Avançada para Internet PARTE 1

Tecnologias lado-servidor (server-side):Scripts de servidor como solução

• Coloca a linguagem de programação dentro do HTML (e não o contrário)<h1>Servlet</h1><% for (int num = 1; num <= 5; i++) { %>

<p>Parágrafo <%= num %></p><%}%><table><tr><td> ... </tr></table>

• Permite o controle da aparência e estrutura da página em softwares de design (e.g., DreamWeaver)

• Página fica mais legível• Quando houver muita programação, código pode ser escondido em

servlets, JavaBeans, componentes (por exemplo: componentes ActiveX, no caso do ASP)

Page 34: Programação Avançada para Internet PARTE 1

Tecnologias lado-servidor (server-side):Scripts de servidor

• Alguns dos mais populares:– Microsoft Active Server Pages (ASP)– JavaServer Pages (JSP)– PHP

• A página geralmente possui uma extensão de arquivo diferente para que o servidor a identifique como um programa

• Páginas JSP, ASP, PHP etc. são processadas e os scripts são executados pelo servidor, que os consome

– No browser, chega apenas a saída do programa: página HTML– Comandos <% .. %> ou similares nunca chegam no browser

• Servidor envia cabeçalho Content-type: text/html (default) ou algum outro tipo texto (text/xml, text/plain)

Page 35: Programação Avançada para Internet PARTE 1

Controle de sessão

• HTTP não preserva o estado de uma sessão. É preciso usar mecanismos artificiais com CGI (ou qualquer outra tecnologia Web)– Sequência de páginas/aplicações:

• Desvantagens: sequência não pode ser quebrada; mesmo que página só contenha HTML simples

– Inclusão de dados na URL:• Desvantagens: pouca flexibilidade e informações expostas na url

– Cookies (informação armazenada no cliente):• Desvantagens: espaço e quantidade de dados reduzidos; browser precisa

estar com os “cookies ativos”

Page 36: Programação Avançada para Internet PARTE 1

Controle de sessão: cookies

• HTTP Cookie – Padronizado na RFCs 2965 e 6265 para persistência de informações entre requisições HTTP

• Um cookie é uma pequena quantidade de informação que o servidor armazena no cliente– Par composto de nome,valor. Exemplos: idade=25, sexo=m– Escopo no servidor: domínio e caminho da página

– Pode ser seguro

– Escopo no cliente: browser (sessão)

– Duração: uma sessão ou tempo definido (cookies persistentes)

– Cookies são criados através de cabeçalhos HTTPContent-type: text/htmlContent-length: 34432Set-Cookie: usuario=ax343Set-Cookie: lastlogin=12%2610%2699

Page 37: Programação Avançada para Internet PARTE 1

Controle de sessão: cookies

Usuário selecionaLivro A

Set-Cookie: livro=A

Usuário selecionaLivro B

Usuário finalizacompra

Set-Cookie: livro=B

Total A+B = R$ 50

CGI

Servidor HTTP

Page 38: Programação Avançada para Internet PARTE 1

Servlets

• Servlets possuem um ciclo de vida (lifetime), ou seja, um processo que vai desde sua criação até sua destruição– O servlet é inicializado pela chamada do método init()– O servlet chama o método service() para processar requests

do cliente (chamando os métodos doGet() ou doPost())– O servlet é finalizado pela chamada do método destroy()– Finalmente, o garbage collector da JVM coleta o servlet

Page 39: Programação Avançada para Internet PARTE 1

Servlets

Page 40: Programação Avançada para Internet PARTE 1

Exercícios

1. Verifique o cabeçalho de GET requests em um site qualquer (dica: use um navegador com ferramentas para desenvolvedor).

2. Configure um ambiente de desenvolvimento para criar seus servlets (tutorial no Moodle).

3. Crie seu primeiro servlet, realize a compilação e implante o servlet no servidor Web (código disponível no Moodle).

4. Modifique seu servlet para atender a requisições GET.

5. Modifique seu servlet para atender a requisições POST.

Page 41: Programação Avançada para Internet PARTE 1

Exemplo de um servlet

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class ServletSimples extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        PrintWriter out;        response.setContentType("text/html");        out = response.getWriter();        String user = request.getParameter("usuario");        if (user == null)                user = “Fulano";        out.println("<HTML><HEAD><TITLE>");        out.println(“Saida do Servlet");        out.println("</TITLE></HEAD><BODY>");        out.println("<H1>Saida do Servlet</H1>");        out.println("<P>Oi, " + user);        out.println("</BODY></HTML>");        out.close(); }}

Page 42: Programação Avançada para Internet PARTE 1

Exemplo de uma JSP equivalente

<html><head><title>Saida do servlet</title></head><body><%String user = request.getParameter("usuario");if (user == null)   user = "World";%><h1>Saida do servlet</h1><p>Oi, <%= user %></body></html>

Page 43: Programação Avançada para Internet PARTE 1

Programação Avançada para Internet

Profº. Felipe A. [email protected]