Conceitos de Programação Web

Programação Java para Web

Prof. Wagner Macedo

## Programação Web - [HTML 5](#sec-html) - [JavaScript](#sec-js) - [Como funciona a web](#sec-web) - [Conteúdo estático e dinâmico](#sec-websites) - [Lado cliente e lado servidor](#sec-programacao-web) - [O protocolo HTTP](#sec-http)

HTML 5

Não precisa ser a versão 5, mas é melhor 😄

Revisão de tags

Relembrando as principais tags de HTML.

Tags de título

Título 1

Título 2

Título 3

Título 4

Título 5

<p>

Eu sou um parágrafo

Eu sou outro parágrafo

<br>

Serve para
quebras
de linha

Quebras no código HTML não surtem efeito na renderização, você ainda precisa do <br>


            

Serve para
quebras
de linha

Tags de lista

Ingredientes para o bolo:

  • Leite
  • Ovos
  • [...]

O bolo é feito assim:

  1. Bata a clara
  2. Junte ao leite
  3. [...]

Tags de formatação

Texto negrito Texto forte Texto itálico Texto enfatizado Texto marcado Texto pequeno Texto removido Texto inserido Texto subscrito Texto sobrescrito

<div>

Tag usada para agrupar elementos de bloco para formatá-los com CSS.

Este é um título

Este é um parágrafo.

<span>

Tag usada para agrupar elementos em linha.

Coco verde faz bem!

Elementos de bloco e elementos em linha

Todo elemento HTML tem um parâmetro de exibição padrão, dependendo do tipo de elemento que é.

A exibição padrão para a maioria dos elementos é bloco (block) ou em linha (inline).

Bloco

Um elemento de bloco sempre começa uma nova linha e ocupa toda a largura disponível.


Título, parágrafo e listas são de bloco.
Em linha

Um elemento em linha não começa uma nova linha e só ocupa a largura necessária.


As tags de formatação são em linha.
block / inline
O <div> é um elemento de bloco.

Um elemento <span> em linha dentro de um parágrafo.

Elementos semânticos

HTML 5 adicionou elementos de agrupamento com significado,
de forma a substituir o <div> em diversas situações.

antes

          
        
depois

          

Alguns desses elementos

<header>
<footer>
<nav>
<main>
<section>
<article>
<aside>
<dialog>
<details>
<summary>
<figure>
<figcaption>

Multimídia

<!-- Clássico elemento <img> --> <img src="images/tio-sam.jpg" width="60%"> <!-- Novos elementos no HTML 5 --> <audio controls> <source src="yoda.ogg"> </audio> <video controls> <source src="spongebob.webm"> </video>
Leitura Recomendada 🔖
Capítulo 1
Visão geral de HTML 5
Capítulo 2
Apresenta as tags semânticas
Capítulo 3
Mais sobre <audio> e <video>

Formulários

O elemento <form> define um formulário usado para coletar entradas do usuário.

Primeiro nome:

Último nome:


Aula de Formulários

O formulário é um dos elementos mais importantes da programação web.

Por isso, teremos uma aula dedicada a eles.

Exemplo completo


      <!DOCTYPE html>
      <html>
        <head>
          <meta charset="utf-8">
          <title>Minha página de teste</title>
          <link rel="stylesheet" href="assets/main.css">
          <script src="assets/modernizr.js"></script>
        </head>
        <body>
          <h1>Minha página HTML</h1>
          <p>Seja bem vindo!</p>
          <img src="assets/minha-foto.png">
        </body>
      </html>
    

Tabela Periódica de Tags

http://madebymike.com.au/html5-periodic-table

CSS

O estilista da web

Como CSS funciona

Atributo style


          

Sou um parágrafo azul

Regras CSS


          <!-- Arquivo HTML -->
          <p id="principal" class="azul">
            Sou um parágrafo azul
          </p>
        

          /* Arquivo CSS */
          #principal {
            color: blue;
          }
        

A seguinte regra surte o mesmo efeito


            /* Arquivo CSS */
            .azul {
              color: blue;
            }
          

Aprenda mais CSS 🔖

Mozilla Developer Network
W3Schools
Site do Maujor

JavaScript

A linguagem de programação da Web

JavaScript não é Java

Não confunda 😉

São linguagens utilizadas na programação web, mas com propósitos completamente diferentes.

Camadas da web

Navegador e o JavaScript

Tempero da web

Quando uma página web faz mais que mostrar informação estática, você pode apostar que o JavaScript provavelmente está envolvido.

🌶

Exemplo 1: JavaScript puro

<p>Preço unitário: R$ 320,00 </p> <form name="calculo"> <p>Quantidade: <input name="qde" type="text"></p> <p>Valor total: R$ <output name="vtotal"></output></p> </form> <script> function calculaTotal() { var qdeItens = document.forms['calculo']['qde'].value; var valorTotal = (qdeItens * 320).toFixed(2); document.forms['calculo']['vtotal'].value = valorTotal; } document.forms['calculo']['qde'].oninput = calculaTotal; </script>

Exemplo 2: jQuery

<a href="http://www.google.com.br/" class="popup" data-width="600" data-height="400"> Acesse o google</a> em um popup <script> $('.popup').click(function (event) { event.preventDefault(); var href = $(this).attr("href"); var width = $(this).attr("data-width"); var height = $(this).attr("data-height"); var popup = window.open(href, "popup", "width=" + width + ",height=" + height); }); </script>

Aprenda mais 🔖

JavaScript
Mozilla Developer Network
W3Schools
jQuery
Manual de jQuery

Como a web funciona

Clientes e Servidores

A web é como uma estrada.

Alguns elementos envolvidos quando você acessa a web

Sua conexão de Internet
A rua entre sua casa e uma loja.
TCP/IP
Os mecanismos de transporte para você fazer um pedido em domicílio.
DNS
Quando você procura o endereço e o telefone da loja.
HTTP
O idioma que você usa para falar com o atendente.
Arquivos do site
São os produtos oferecidos pela loja.

O que acontece quando você digita um endereço no browser?

O que o browser fazAnalogia
1 Contata o servidor DNS e encontra o verdadeiro endereço do site. Você encontra os detalhes de contato da loja.
2 Manda uma mensagem de requisição HTTP para o servidor web pedindo para enviar a cópia do site. Você liga para a loja e faz seu pedido.
3 No momento que o servidor aprova a requisição do cliente, o servidor manda ao cliente a mensagem 200 OK, que significa "Claro que você pode ver esse site! Aqui está", e começa a enviar os arquivos do site para o browser em uma série de pequenos pedaços chamados pacotes de dados. A loja envia seu pedido.
4 O browser monta os pequenos pedaços em um site completo e lhe mostra. Pedido chega na sua casa

O servidor web é como um mordomo

Endereço IP e Portas

Portas conhecidas
HTTP80
HTTPS443
FTP21
SMTP25
SSH22

A Internet e a World Wide Web

Veja mais 🔖

Como a Web funciona
Como funciona a Internet e a World Wide Web

Websites

Sites Estáticos
Fornece o conteúdo de arquivos hospedados.
Não há interação com o cliente.
Sites Dinâmicos
Fornece a saída gerada por um programa.
Sofrem alterações em determinadas condições.
Estático Dinâmico
O conteúdo, criado previamente, é o mesmo toda vez que a página é carregada. O conteúdo é gerado "na hora" e muda regularmente.
O conteúdo só muda quando alguém atualiza os arquivos hospedados no servidor. A página contém código no lado servidor, o que permite gerar conteúdo diferente a cada requisição.
Código HTML+CSS+JavaScript PHP, ASP.NET, JSP, Ruby, Java.
Pode acessar banco de dados.

Sites Estáticos

Vantagens 👍
  • Fácil de criar
  • Hospedagem barata
  • Custo baixo
Desvantagens 👎
  • Requer desenvolvedor web para atualizar site
  • Funcionalidades limitadas

Sites Dinâmicos

Vantagens 👍
  • Não requer desenvolvedor para atualizar o site
  • Funcionalidades de acordo com a necessidade
Desvantagens 👎
  • Difícil de criar
  • Hospedagem mais cara
  • Custo mais alto

Servidor web estático

Servidor web dinâmico

Dinâmico vs Estático

Lado cliente vs Lado servidor

A programação web acontece em códigos relevantes para o cliente e códigos relevantes para o servidor.

👆 websites dinâmicos
Lado Cliente
  • HTML+CSS+JavaScript
  • O código é executado no navegador
  • Acesso ao ambiente do navegador
  • Incompatibilidades entre navegadores 😠
Lado Servidor
  • Qualquer linguagem pronta para web
  • O código é executado no servidor
  • Acesso a recursos no servidor e em outros servidores 😁

Frontend vs Backend

Frontend

Backend

HTTP

O protocolo dos navegadores e servidores web

O HTTP é o protocolo de comunicação utilizado pelos navegadores e servidores web. Quando o navegador solicita uma página web é chamado de requisição e quando o servidor web envia a página solicitada de volta é chamado de resposta.

O que é um protocolo de comunicação?

Protocolos não se misturam

Características de HTTP

  • 🔁 Requisição-Resposta
  • 🖼️ Independente de mídia
  • 📨 Sem estado

Equivalência de Nomes

Português Inglês
Requisição Request
Resposta Response
Método Method
Caminho Path
Cabeçalhos Headers
Conteúdo/Corpo Content/Body
Código de estado Status code
Para acessar http://portal.fanese.edu.br/?page_id=220

A requisição feita pelo cliente


            GET /?page_id=220 HTTP/1.1
            Host: portal.fanese.edu.br
             
          
Explicando a requisição: - **`GET`**: eu quero obter uma informação - **`/?page_id=220`**: a informação desejada - **`HTTP/1.1`**: estou me comunicando com o protocolo HTTP na versão 1.1 - **`Host`**: estou pedindo de um site específico - **`portal.fanese.edu.br`**: o nome do site

Esta requisição tem o conteúdo vazio!

A resposta entregue pelo servidor


            HTTP/1.1 200 OK
            Date: Mon, 31 Jul 2017 21:15:35 GMT
            Content-Type: text/html; charset=UTF-8
            Server: Apache

            <!DOCTYPE html>
            <html lang="pt-BR">
            …
          
Aqui o servidor diz “eu também falo HTTP na versão 1.1, e a requisição foi um sucesso, então eu respondi com o código de estado **`200`**”. A string `OK` é opcional, usado para ser lido por humanos. Cabeçalhos são enviados para descrever o que é a mensagem e como deve ser entendida. O conteúdo da página solicitada é incluído, começando por **`<!DOCTYPE html>`**.
#### Prática HTTP 1. Acesse https://www.hurl.it 2. Deixe a opção **GET** selecionada, insira um endereço no campo e clique em **Launch Request** 3. Observe na resposta da requisição - **Status code** (provável 200 OK) - **Headers** (os cabeçalhos) - **Body** (o corpo) 4. Clique em **view raw** (no corpo da resposta)

Postman

Postman
Como usar o Postman

URI/URL

O identificador de endereços na Internet.

Exemplos de URI/URL

  • https://www.facebook.com/zuck
  • ftp://ftp.uhserver.com
  • tg://resolve?domain=wagnermacedo
  • mailto:wagnermacedo@prof.fanese.edu.br

URL HTTP

#### Porta HTTP Quando acessamos http://portal.fanese.edu.br/, estamos acessando o servidor web na porta `80`. O seguinte URL dá acesso ao mesmo site: http://portal.fanese.edu.br:80/. Para acesso a um servidor que não está na porta `80`, é necessário afixar a **porta** ao nome do servidor. http://portquiz.net:8080/
#### Porta HTTPS O tráfego de HTTP seguro se faz pela porta 443. - https://facebook.com/ - https://facebook.com:443/ É óbvio que também é possível usar outra porta: https://www.exemplo.com:7865/

A requisição HTTP

Métodos de requisição HTTP

GET A requisição mais comum de todas.
Usamos para obter um recurso do servidor.
POST Usamos para solicitar alterações no lado servidor.
PUT Substitui o conteúdo de um recurso.
DELETE Remove um recurso especificado.
TRACE Raramente usados por desenvolvedores web
OPTIONS
PATCH
CONNECT
HEAD

Cabeçalhos de requisição importantes


          GET /blog/ HTTP/1.1
          Host: www.exemplo.com.br
          User-Agent: Mozilla/5.0 (Linux x86) Chrome/59.0
          Accept: text/html
          Accept-Charset: UTF-8
          Accept-Language: pt-br
          Cookie: Variant=1; Theme=blue;
          Referer: http://exemplo.com/index.html
          If-Modified-Since: Sat, 07 Aug 2017 21:18:31 GMT
           
        
          
            ↔️ O nome do servidor desejado
            ↔️ Uma string que identifica o browser.
            ↔️ O tipo de conteúdo esperado pelo browser
            ↔️ A codificação de caracteres esperada
            ↔️ O idioma esperado pelo browser
            ↔️ O browser envia os cookies armazenados
            ↔️ Browser envia site que originou a requisição.
            ↔️ Faz uma requisição condicional
          

          POST /blog/cadastro.php HTTP/1.1
          Host: www.exemplo.com.br
          Accept: text/html
          Accept-Charset: UTF-8
          Accept-Language: pt-br
          Content-Type: application/x-www-form-urlencoded
          Content-Length: 35
          Cookie: Variant=1; Theme=blue;

          name=John+Darling&address=Neverland
        
          
            
            
            
            
            ↔️ O tipo de conteúdo do corpo da requisição
            ↔️ O tamanho em bytes do corpo da requisição
          

A resposta HTTP

Códigos de resposta HTTP

1xx Informativa
200 OK
A maioria dos sites devolvem essa resposta.
O corpo da resposta geralmente estará preenchido.
Veja outros códigos dessa classe
301 Moved Permanently (Movido Permanentemente)
Esta e todas as solicitações futuras devem ser redirecionadas para uma dada URI.
302 Found (Encontrado)
O site foi movido temporariamente para uma dada URI.
303 See Other (Veja Outro)
Normalmente os browsers, quando recebem essa resposta, tem o mesmo comportamento do código 302.
304 Not Modified (Não Modificado)
Indica que o recurso solicitado não foi modificado. Essa resposta é dada quando a requisição tem um cabeçalho If-Modified-Since.
307 Temporary Redirect (Redirecionamento Temporário)
Semelhante ao código 302, mas o método de requisição não deve mudar.
Veja outros códigos dessa classe
401 Unauthorized (Não autorizado)
O usuário não está autorizado e deve fornecer um usuário e senha.
Note que, nesses casos, o navegador vai abrir uma caixa para digitar usuário e senha.
403 Forbidden (Proibido)
Acesso a um certo recurso é proibido.
O servidor pode restringir acesso a todos ou a alguns usuários.
Diferente do código 401, não será solicitado autenticação.
404 Not Found (Não Encontrado)
O recurso solicitado não existe.
O segundo código de resposta mais comum, depois de 200.
405 Method Not Allowed (Método Não Permitido)
O método de requisição usado pelo cliente não é permitido para o recurso atual.
414 URI Too Long (URI Muito Longa)
A URI fornecida é muito longa.
Normalmente isso quer dizer que foi feito uma requisição GET, mas deveria ser feita uma requisição POST.
Veja outros códigos dessa classe
500 Internal Server Error (Erro Interno do Servidor)
Indica que houve um erro no servidor ao processar a requisição.
Por exemplo, uma exceção.
Veja outros códigos dessa classe

Cabeçalhos de resposta importantes


          HTTP/1.1 200 OK
          Content-Type: text/html; charset=utf-8
          Content-Lenght: 27855
          Set-Cookie: Variant=1; Theme=blue;
          Cache-Control: max-age=3600

          <!DOCTYPE html>
          <html lang="pt-BR">
          …
        
          
            ↔️ O tipo de conteúdo do corpo da resposta
            ↔️ O tamanho em bytes do corpo da resposta
            ↔️ O servidor envia cookies para o browser armazenar
            ↔️ O servidor indicando para o cliente fazer cache
          

          HTTP/1.1 301 Moved Permanently
          Location: https://www.wikipedia.org/
          Content-Type: text/html; charset=iso-8859-1
          Content-Length: 234
          
          <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
          <html><head>
          <title>301 Moved Permanently</title>
          …
          
          
            ↔️ Local para onde o browser deve redirecionar
          

Negociação de Conteúdo

Entendendo a negociacao de conteúdo via cartas

MIME-type

Estrutura geral


          tipo/subtipo
        

Exemplos


          text/plain
          text/html
          text/css
          text/javascript
          image/jpeg
          image/png
          audio/mpeg
          audio/ogg
          audio/*
          video/mp4
          application/octet-stream
        
Leitura recomendada

Prática HTTP 2

Usando o https://www.hurl.it ou o Postman, faça as seguintes requisições GET e observe as respostas.

  1. Acesse https://wikipedia.org/
  2. Acesse https://speakerfight.com/ usando o cabeçalho
    Accept-Language: pt-br
    • Refaça a requisição com o valor en (de inglês)
    • Refaça a requisição com o valor fr (de francês)
  3. Acesse http://httpbin.org/image usando o cabeçalho
    Accept: image/png
    • Refaça a requisição com o valor image/jpeg
    • Refaça a requisição com o valor image/webp

Leitura recomendada 🔖

Métodos HTTP
Os métodos HTTP: quais são e pra que servem
Como funcionam os métodos GET e POST
Lista de códigos de estado HTTP

Dúvidas?

Este slide pode ser encontrado em:
http://prof.wagnermacedo.com/2017-2/PJW/2