Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

DESENVOLVIMENTO DE SISTEMAS WEB:
Aula 1 – Revisão da sintaxe Java:
INTRODUÇÃO: Java é uma linguagem de programação lançada pela primeira vez pela Sun Microsystems, em 1995, com o objetivo de criar uma linguagem orientada a objetos dinâmica, para uso nos mesmos tipos de aplicações desenvolvidas em C e C++, mas sem as dificuldades e os erros mais comuns destas linguagens.
Conforme a experiência dos projetistas da linguagem, as escolhas realizadas adicionaram novas características ou suprimiram outras do C++, visando criar uma linguagem que facilitasse a geração de código robusto, confiável, facilmente utilizável em plataformas diversas.
A linguagem permite o desenvolvimento de aplicações em diversos ambientes. Existe software Java, desde, para dispositivos pequenos como, também, para mainframes. Por essa razão, a linguagem oferece 3 (três) ambientes de desenvolvimento:
- Java Standard Edition: Ambiente mais utilizado. Seu uso é voltado para PCs e servidores.
- Java Entreprise Edition: Plataforma voltada para redes, Internet, Intranet e afins. Contém uma série de especificações, cada uma com funcionalidades diferentes: JDBC (Java Database Connectivity) , JSP (Java Server Pages) e  Servlets.
- Java Micro Edition: Ambiente de desenvolvimento para dispositivos móveis ou portáteis.
ATRIBUIÇÃO DE VALORES: 
A linguagem Java fornece vários operadores para operações aritméticas e booleanas. Possui os operadores +, -, *, / normais para operações aritméticas. Suporta, também, o operador de módulo ou resto (%). Por exemplo:
21/3 é igual a 7.
21%3 é igual a 0.
Você pode, também, utilizar operadores aritméticos ao inicializar variáveis. Por exemplo:
Inicializar x com r + 1:
 
int x = r + 1;
Você pode, também, optar pelo uso de uma sintaxe abreviada ao efetuar operações em uma mesma variável. Por exemplo:
x += r;
equivale a   x = r + x;
OBSERVE A TABELA ABAIXO:
Operador
Utilização
Equivalente a
+ =
X += R
X = X + R;
- =
X - = R
X = X - R;
*=
X *= R
X = X * R;
/ =
X / = R
X = X / R;
INCREMENTO / DECREMENTO:
Incrementar uma variável é adicionar uma unidade ao seu valor original. Por exemplo:
x = x + 1;
 
ou
 
x += 1;
 
ou 
 
x++; 
 
 
O mesmo ocorre com o operador de decremento: x--;
Atenção! O posicionamento do operador de incremento/decremento tem importância. Quando colocado após a variável, esta é usada e só depois ocorre o incremento. Por exemplo:
 
int x = 2;
 
y = x++;
 
No final y armazenará o valor 2 e x armazenará o valor 3. Ou seja, a variável x foi primeiramente usada, sendo armazenada na variável y e só depois foi incrementada.
Observe agora:
 
int x = 2;
 
y = ++x;
 
Agora, y armazenará 3 e x armazenará 3 porque primeiro a variável x será incrementada e, só depois, será usada e armazenada em y.
 
Ou seja, em uma operação aritmética, colocar o operador antes da variável incrementará (ou decrementará) a variável primeiro, antes da avaliação da expressão. 
Agora, se você colocar o operador depois da variável, a expressão será avaliada primeiramente. 
Exemplos:
 
int x = 5;
int y = 6;
int r = ++x;   // após esta expressão, r = 6 e x = 6
int s = y++;    // após esta expressão, s = 6 e y = 7
OPERADORES PARA COMPARAÇÃO DE IGUALDADE:
= = 
Comparação de tipos primitivos
Equal()
Comparação de objetos( tais como String, MyObject). 
Atenção! Se você utilizar = = por engano, para comparar dois objetos, isso, na verdade, irá comparar a referência dos dois objetos e não os objetos reais. A não ser que você esteja comparando as mesmas referências de objetos, esta operação retornará falsa:
 
String x = new String (“My String”);
String y = new String (“My String”);
boolean z = (x = = y);              // z = falso
boolean w = (x.equals(y));     // w = verdadeiro
OPERADORES BOOLEANOS:
 >
Maior que
 <
Menor que
< =
Menor ou iqual a
> =
Maior ou iqual a
A comparação pode ser realizada entre tipos primitivos, como valores inteiros, long, double, caracteres etc.
 
Exemplos:
 
int r = 3;
int s = 7;
boolean t = r < s;    //   t = verdadeiro
OPERADOR PARA COMPARAÇÃO DE DESIGUALDADE:
! =
Desigualdade entre tipos primitivos
 !obj1.equal(obj2)
Desigualdade entre dois objetos
Você pode, também, utilizar && e || para verificar condicionais (operações and (e) e or (ou), respectivamente).
ESTRUTURAS CONDICIONAIS: 
if (condição) {
                    ... // comportamento para quando a condição for verdadeira
}
                    else {
                    ... // comportamento para quando a condição for falsa
}
 
Você pode optar por ter um único if, if/else ou if com vários else:
 
if (x < -1)
                    y = x + 2;
else
                    if (x < = 0)
                                        y = 1;
                    else
                                        y = x * x;
ESTRUTURAS DE REPETIÇÃO:
Java fornece uma série de mecanismos de laço, assim como outras linguagens de programação. Exemplos:
Laço for:
 
for (int x = 0; x < 4; x++) {
                    //...
}
Laço while:
 
while (se a condição for verdadeira) {
                    // ...
} 
 
public class Teste {
public static void main( String args[] ){
int n = 10;
while( n > 0 ){
System.out.println( n );
          n--;
}
    }
}
OPERADOR TERNÁRIO:
A linguagem Java fornece um operador ternário (?) para reduzir a expressão if/else, assim como C e C++. Por exemplo:
 
r = (x > y) ? 3: 1;
 
Onde (x > y) é o teste condicional. O primeiro valor após ? representa o valor de r, se a condicional for verdadeira. O segundo valor representa o valor de r, se a condicional for falsa. 
ESTRUTURA DE SELEÇÃO MÚLTIPLA – SWITCH:
Essa estrutura é usada, quando cada alternativa corresponde a valores distintos de um só indicador, isto é, quando cada teste compara o valor do indicador fornecido por uma variável ou expressão com um grupo de constantes diferentes.
switch([expressão]) {
  case [constante 1]: 
     [comando 1]
     break;
  case [constante 2]: 
     [comando 2]
     break;
     .
     .
     .
  case [constante n]:
     [de comando n]
     break;
  default: 
     [comando]
}
ORIENTAÇÃO A OBJETOS:
O termo "orientação a objetos", ou "baseado em objetos", significa que o software é organizado como uma coleção de objetos separados que incorporam tanto a estrutura quanto o comportamento dos dados. 
Essa concepção difere, em parte, da programação convencional, segundo a qual a estrutura e o comportamento dos dados têm pouca vinculação entre si.
Trata-se de um paradigma para o desenvolvimento de software, que se baseia na utilização de componentes individuais (objetos) que colaboram para construir sistemas mais complexos. A colaboração entre os objetos é feita através do envio de mensagens.
Segundo Martins, eis algumas características da tecnologia orientada a objetos:
- ABSTRAÇÃO - Consiste em buscar apenas os aspectos essenciais de uma entidade, ignorando suas propriedades acidentais. Ou seja, concentrar-se no que o objeto é e faz, antes de decidir como ele deve ser implementado. O uso da abstração preserva a liberdade de se tomar decisões mais importantes, evitando, tanto quanto possível, preocupações com detalhes prematuros.
- ENCAPSULAMENTO - Consiste na separação dos aspectos externos de um objeto, acessíveis por outros objetos, dos detalhes internos da implementação daquele objeto, que ficam ocultos dos demais objetos. O encapsulamento impede que um programa se torne tão independente que uma pequena modificação possa causar grandes efeitos de propagação. A implementação de um objetopode ser modificada sem que isso afete as aplicações que o utilizam. O encapsulamento não é exclusivo das linguagens orientadas a objetos, porém a capacidade de combinar estruturas de dados e seu comportamento em uma única entidade torna-a mais completa e mais poderosa do que as linguagens convencionais.
- COMPARTILHAMENTO - A herança da estrutura de dados e do seu comportamento permite que a estrutura comum seja compartilhada por diversas subclasses semelhantes, sem redundâncias. O compartilhamento de código é uma das principais vantagens das linguagens orientadas a objetos. Mais importante que a redução do trabalho de codificação é a clareza conceitual proveniente de reconhecimento de que diferentes operações são, na realidade, a mesma. A possibilidade da reutilização de modelos e códigos em projetos futuros é enfatizada como uma justificativa para a tecnologia orientada a objetos. O desenvolvimento baseado em objetos fornece ferramentas como abstração, o encapsulamento e a herança que permitem "montar bibliotecas" de componentes reutilizáveis.
- ÊNFASE NA ESTRUTURA DE OBJETOS - Ênfase na estrutura de objetos, e não na estrutura de procedimentos, significa preocupar-se em especificar o que um objeto é, e não como ele é utilizado. A figura 1 mostra a estrutura de um objeto. O uso de um objeto é altamente dependente dos detalhes da aplicação, os quais, frequentemente, mudam durante o desenvolvimento. O desenvolvimento baseado em objetos coloca maior ênfase na estrutura dos dados e menor ênfase na estrutura de procedimentos, diferente do desenvolvimento tradicional baseado na decomposição funcional.
IMPLEMENTAÇÃO DE HERANÇA E POLIFORMISMO:
HERANÇA - Podemos afirmar que é o principio pelo qual classes semelhantes são agrupadas em hierarquias. 
Veja o exemplo:
 
Uma empresa X possui funcionários. E possui, também, um ou mais gerentes (que não deixam de ser funcionários também).
class Funcionario {
String nome;
String cpf;
double salario;
}
 
class Gerente extends Funcionario {
int senha;
int quantidadeFuncionariosGerenciados;
 
public boolean autentica(int senha) {
if (this.senha = = senha) {
System.out.println("Acesso Permitido!");
return true;
} else {
System.out.println("Acesso Negado!");
           return false;
 }
 }
}
POLIFORMISMO - Princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que possuem a mesma assinatura, entretanto comportamentos diferentes.
Significa ter ‘muitas formas’, que significa um único nome representando um código diferente, selecionado por algum mecanismo automático.
Na linguagem Java, a invocação de método sempre vai ser decidida em tempo de execução.
 
Vejamos exemplos:
EXEMPLO 1:
public class Somas {
public int soma(int x, int y) { return x + y; }
                    public int soma(int x, int y, int z) {  return x + y + z; }
                    public int soma(int x, int y, int z, int w) {  return x + y + z + w; }
}
EXEMPLO 2:
public class Veiculo {
public void partida( ) {  System.out.println("Veiculo partindo..."); }
}
 
public class Carro extends Veiculo {
public void partida( ) {  System.out.println("Carro andando..."); }
}
 
public class Aviao extends Veiculo {
public void partida( ) {  System.out.println("Aviao decolando..."); }
}
CONTROLE DE ERROS: 
BLOCOS TRY-CATCH - A captura e o tratamento de exceções ocorre através da especificação de blocos try, catch e finally, definidos através destas mesmas palavras reservadas da linguagem Java. Um comando try/catch/finally obedece à seguinte sintaxe: 
try {
   //  código que inclui comandos/invocações de métodos
   //  que podem gerar uma situação de exceção.
}
catch (XException x) {
   //  bloco de tratamento associado à condição de
   //  exceção XException ou a qualquer uma de suas
   //  subclasses, identificada aqui pelo objeto
   //  com referência x
}
catch (YException y) {
   //  bloco de tratamento para a situação de exceção
   //  YException ou a qualquer uma de suas subclasses
}
finally {
   //  bloco de código que sempre será executado após
   //  o bloco try, independentemente de sua conclusão
   //  ter ocorrido normalmente ou ter sido interrompida
}
O bloco finally é opcional.  Em geral, ele inclui comandos que liberam recursos que, eventualmente, possam ter sido alocados durante o processamento do bloco try e que podem ser liberados, independentemente da execução ter encerrado com sucesso ou ter sido interrompida por uma condição de exceção. 
 
Exemplo de Tratamento de Erro:
public class TesteExecucao{
          public static void main (String [ ] args){
                    String variavel = “Teste”;
                    try {
                              Integer num = new Integer(variavel);
                              System.out.println(“Valor da variável num  “ + variável);
                    } catch (NumberFormatException nfe){
                              System.out.println(“Não é possível atribuir a string   “ + variável
                                        + “ a um objeto inteiro. \n”
                                        + “A seguinte mensagem foi retornada: \n \n”
                                        + nfe.getMessage( ));
                    }
          }
}
EXERCÍCIOS:
1. Associe a coluna da esquerda com a da direita e, a seguir, marque a alternativa que contém a sequência correta: 
1) Construtores   ( ) Métodos que dão acesso aos dados internos de um objeto. 
2) Acessores      ( ) Definem as diferentes espécies de valores que se podem usar em seus programas. 
3) Mutantes        ( ) Métodos que permitem que se altere o estado interno de um objeto. 
4) Tipos              ( ) Métodos utilizados para inicializar objetos durante sua instanciação.
1) 1, 2, 3, 4 
2) 2, 4, 1, 3 
3) 2, 4, 3, 1 
4) 4, 2, 3, 1 
5) 4, 3, 2, 1
2.(Cesgranrio 2008) Uma classe ClasseA de determinada aplicação possuía um método calculeAlgo() em que testes (instruções de desvio condicional) eram utilizados para se determinar que algoritmo deveria ser adotado para efetuar o cálculo. Foi criada uma nova hierarquia de classes, iniciando na classe abstrata ClasseB, que declara o método abstrato calcule(). Este método é implementado por cada classe concreta da hierarquia, sendo cada uma delas correspondente a um dos algoritmos previstos no método calculeAlgo() original. ClasseA passou a ter um atributo do tipo ClasseB e métodos de acesso ao mesmo, e calculeAlgo() teve seu código substituído por uma simples chamada ao método calcule() do objeto armazenado no novo atributo. O conceito OO (Orientação a Objetos) predominante na descrição acima é a(o):
1) sobrecarga de atributo.
2) sobrecarga de método.
3) herança múltipla.
4) polimorfismo.
5) acesso externo direto a atributo.
3.(Cesgranrio 2011) Sejam as seguintes classes Java:
public class Teste {
private int x;
public Teste() {
x=10;
}
public Teste(int c,int d) {
x=c+d;
}
public int getX() {
return x;
}
public void m1(int a) {
int p;
try {
p=x%a;
if(p<4)
throw new Exc01();
}
catch(Exc01 e) {
x+=5;
return;
}
catch(Exception e) {
x+=7;
return;
}
finally {
x+=9;
}
return;
}
}
public class Q01 {
public static void main(String[] args){
Teste t=new Teste(1,2);
t.m1(5);
System.out.println(t.getX());
}
}
O que será exibido no console quando da execução da função main() acima?
1) 19
2) 17
3) 14
4) 10
5) 8
RESP: 1 – 2 / 2 – 4 / 3 – 2
Aula 2 – Visão geral do ambiente servidor
ARQUITETURA WEB: 
Segundo KERLAN, no início, a computação distribuída era associada a redes de computadores que utilizavam algum sistema operacional de rede, como, por exemplo, o Netware e caracterizavam-se, fundamentalmente, como servidoresde arquivos. Nesse modelo, há necessidade de transferência integral de todos os arquivos, sejam programas ou dados, para execução pelo cliente, pois foi projetado para atender clientes sem disco local.
Entretanto, rapidamente, a computação distribuída passou a envolver serviços baseados em aplicativos cliente/servidor que caracterizam a arquitetura de aplicação Web.
O cliente envia uma solicitação, o processamento é geralmente feito na máquina servidora remota e, nesse caso, somente os resultados são devolvidos ao cliente. Dessa forma, minimiza-se o tráfego de informações a rede.
Vejamos a figura abaixo, elaborada por LIMA, onde podemos visualizar a arquitetura básica de uma aplicação Web com um navegador (cliente Web) realizando uma requisição a um servidor Web. Um servidor Web pode ter várias aplicações que se conectam a vários bancos de dados:
1 - Na primeira fase, o cliente Web realiza a requisição. 
2 - Na segunda fase, o servidor Web recebe a requisição do cliente. 
3 - A comunicação entre servidor Web e a aplicação Web é realizada na terceira fase.
4 - Uma consulta aos dados do banco de dados é realizada na fase 4 pela aplicação Web. 
5 - A resposta é enviada na fase 5.
6 - A aplicação Web retorna com a resposta para o servidor Web na etapa 6.
7 - O cliente Web recebe a resposta do servidor na fase 7.
8 - Finalmente, o cliente Web recebe a resposta pela requisição inicial (fase 8). 
CARACTERÍSTICAS DAS APLICAÇÕES WEB:
Eis algumas características da arquitetura das aplicações Web:
- O servidor Web pode atender a diversos clientes simultaneamente.
- Um browser Web o qual recebe, trata e apresenta um arquivo recebido no formato HTML, é responsável pela padronização e definição da interface com o usuário.
- Todos os serviços Web baseiam-se no modelo cliente/servidor.
- A comunicação é baseada no protocolo HTTP – protocolo para transferência de informações na Web.
ARQUITETURAS MAINFRAMES:
Segundo SANTOS[6], as arquiteturas mainframe possuem as seguintes características:
• Processamento centralizado.
• Terminais burros.
• Redes de comunicação lenta.
MAINFRAME: Gerenciamento de Dados; Gerenciamento da lógica e; Gerenciamento da interface.
ARQUITETURA CLIENTE SERVIDOR:
A maioria das aplicações da Internet utiliza o modelo de interação chamado “cliente/servidor”. Pode-se afirmar que a arquitetura cliente servidor implementa uma separação lógica de funções baseada no conceito de serviço, onde:
CLIENTE (Inicia a solicitação; Aguarda a resposta; Também denominado de “front-end” ou “workstation”) – 
é um software executado em um host que solicita informações a outro programa, normalmente através da rede;
SERVIDOR (Passivo (aguarda as solicitações dos clientes); Ao receber uma solicitação, processa e envia a resposta; Pode interagir com vários clientes ao mesmo tempo; Também denominado de “back-end”) - é um software que fica em espera, aguardando solicitações de clientes e que fornece os dados solicitados quando recebe uma solicitação de um cliente.
ARQUITETURAS EM CAMADAS: Segundo BUENO, a Arquitetura em Camadas estimula a organização da arquitetura do sistema em um conjunto de camadas coesas com fraco acoplamento entre elas.
Pode-se afirmar que cada camada oferece um conjunto de serviços ao nível imediatamente inferior, através de uma interface, usando funções realizadas no próprio nível.
- UI (INTERFACE COM USUÁRIO) - Reúne classes do sistema com as quais os usuários interagem.
- NEGÓCIOS - Reúne classes do sistema que agregam regras de negócio e serviços.
- DADOS - Responsável por armazenamento e recuperação de dados persistentes.
- COMUNICAÇÃO - Responsável por distribuição do sistema em diversas máquinas.
Essa arquitetura, apesar de ter como desvantagem o aumento no número de classes existentes no sistema, apresenta as seguintes vantagens: organização de código (no que diz respeito à interface com o usuário (UI), comunicação, negócio e dados); possibilita a alteração de implementação de uma camada sem afetar a outra, desde que a interface entre as mesmas seja mantida; permite que uma camada trabalhe com diferentes versões de outra camada.
TOMCAT - Segundo D’ AVILA, o Tomcat é um servidor de aplicações Java para web ou um Container Web. É software livre e de código aberto, surgido dentro do conceituado projeto Apache Jakarta e que teve apoio da Sun Microsystems como Implementação de Referência (RI) para as tecnologias Java Servlet e JavaServer Pages (JSP). Pode atuar como servidor web/HTTP, ou pode funcionar integrado a um servidor web dedicado como o Apache httpd ou o Microsoft IIS. Hoje, o Tomcat tem seu próprio projeto de desenvolvimento independente, dentro da Apache Software Foundation. É robusto e suficiente para ser utilizado mesmo em um ambiente de produção.
GLASSFISH ENTERPRISE SERVER - GlassFish trata-se de um servidor de aplicações de código aberto para a plataforma Java. Foi desenvolvido como implementação de referência do padrão Java EE 6 e, agora , conta com novas funcionalidades que adicionam características como alta disponibilidade, escalabilidade e tolerância a falhas, que são essenciais para um servidor de produção que hospede aplicações de médio e grande porte.
O servidor GlassFish coloca uma fonte livre, aberta, comercial, ao nível de implementação do Java EE, nas mãos da comunidade [ORT], [SILVA].
 Saiba mais sobre TomCat: http://tomcat.apache.org/
 Saiba mais sobre GlassFish: http://glassfish.java.net/
1 - O incorreto está em:
1) Na arquitetura das aplicações Web, a comunicação é baseada no protocolo MIME.
2) Software cliente também pode ser denominado de front-end ou workstation.
3) Arquitetura em camadas tem como desvantagem o aumento do número de classes existentes no sistema.
4) GlassFish é um ambiente estruturado para o desenvolvimento de um servidor de aplicativos de código aberto.
5) Tomcat é um servidor de aplicação Java para web.
2 - (UPENET/IAUPE - 2007) Analise as seguintes afirmações sobre Implementação de Arquitetura em Camadas.
I. Um disseminado tipo de arquitetura de software é a Arquitetura em Camadas. Nessa arquitetura, os elementos estão dispostos em 3 camadas (apresentação, negócio e dados).
II. Na arquitetura em camadas, os elementos ficam dispostos um sobre o outro, como camadas de uma lasanha. O elemento que se encontra na camada acima utiliza os serviços do elemento da camada abaixo, e um elemento só se relaciona com o elemento da camada imediatamente acima e com o elemento da camada imediatamente abaixo, se houver.
III. Um dos objetivos dessa arquitetura é que mudanças na implementação dos serviços de uma camada não devem afetar as demais, desde que as interfaces dos serviços oferecidos pelas camadas não sejam alteradas.
Assinale a alternativa que contém a(s) afirmação(ões) CORRETA(S).
1) Apenas I. 
2) Apenas I e II. 
3) Apenas II e III. 
4) Apenas III.
5) I, II e III.
3. (FGV 2008) O Apache é um servidor Web extremamente configurável, robusto e de alta performance desenvolvido com o objetivo de criar um servidor web com características para alto desempenho e com código fonte disponível gratuitamente via Internet. Por padrão, no ambiente Linux seus arquivos de configuração residem no diretório / etc. / apache. O Apache disponibiliza uma gama de utilitários, um deles que funciona como um Shell script que faz interface com o Apache de forma mais amigável e outro utilizado para criar / e gerenciar senhas criptografadas Crypto/MD5. Esses utilitários são, respectivamente:
1) Apachectl e htdigest.
2) Apacheshell e htmd5.
3) Apachescript e htcrypto.
4) Apachesetup e htpasswd.
5) Apacheconfig e htmanage.
4. Considere as afirmativas abaixo:
I - Na arquitetura J2EE, o container web Apache Tomcat permite a execução de páginas JSP e servlets, que são classes Java que processam dinamicamente as requisições e constroem respostas naforma de páginas HTML.
II - O Tomcat e o Glassfish, servidores de aplicações Java (conteiner servlet), são open source e compatíveis com aplicações escritas na arquitetura JEE 6; no entanto, ao contrário do Tomcat, o Glassfish não suporta executar aplicações escritas em JSP (Java server pages).
III - Na qualidade de servidor de aplicações Java para web, o Tomcat é parte da plataforma J2EE, que abrange as tecnologias Servlet e JSP, incluindo as tecnologias de apoio relacionadas, tais como Realms e segurança, JNDI Resources e JDBC DataSources. O Tomcat tem a capacidade de atuar também como servidor web/HTTP ou pode funcionar integrado a um servidor web dedicado, tais como o Apache httpd ou o Microsoft IIS.
O correto está em:
1) I, apenas.
2) I e III, apenas.
3) II e III, apenas.
4) II, apenas.
5) III, apenas.
6) I, II e III.
5. (FCC - 2010) O ambiente necessário para a execução de aplicações web desenvolvidas com as tecnologias Java Servlet e JSP é fornecido pelo container Web:
1) Tomcat.
2) Apache.
3) IIS.
4) Servlet.
5) Bean.
RESPOSTA: 1, 3, 1, 2, 1.
Aula 3 – Tecnologia Servlet
No passado, a Internet era composta, basicamente, de páginas estáticas. Hoje, ela oferece várias aplicações com conteúdo dinâmico e personalizado.
A tecnologia Servlet é uma das ferramentas que possibilita a elaboração de sites com conteúdo dinâmico.
O QUE SÃO SERVLETS? 
Trata-se da alternativa Java para os scripts CGI.
São classes Java, cujos objetos são capazes de receber uma requisição Web, processá-la e retornar um conteúdo como resposta. Geralmente, trabalham com o protocolo HTTP ( ou HTTPS) e  o conteúdo retornado é um texto em HTML;
Essas classes são carregadas e executadas automaticamente pelo Servidor Web. Podem trabalhar com outro tipo de conteúdo, como por exemplo: imagem, vídeo etc.; e são gerenciados pelo Container Servlet (Container Java também é conhecido como servidor de aplicações Java. Ele gerencia a execução de serviços web Java; disponibilizar infraestrutura necessária para estes serviços e permite a comunicação com outros componentes Java e outras aplicações.) de um Servidor de Aplicações JEE.
Por utilizar a linguagem de programação Java, essa tecnologia oferece algumas vantagens já herdadas, tais como:
- Programação orientada a objetos.
- Flexibilidade (Java é uma linguagem bastante difundida, com ampla documentação, possuindo diversos códigos prontos e bibliotecas, das quais o desenvolvedor pode usufruir).
- Portabilidade (a aplicação desenvolvida pode ser implantada em diversas plataformas, sem a necessidade de qualquer modificação na aplicação).
Segundo BRUKSCH (BRUKSCH, M.B. Programação com Objetos Distribuídos: Servlets. Disponível na INTERNET via www.url: http://www.inf.ufrgs.br/gppd/disc/cmp167/trabalhos/mp2000-1/marcosbruksch/artigo_servlets.htm Arquivo consultado em: 15/11/2012.), os servlets possuem algumas características que tornam esta tecnologia ainda mais interessante, como por exemplo:
- Código Modular - Um servlet pode executar outro servlet, mesmo que remotamente. Essa característica permite a criação de aplicativos modularizados, criando aplicações com funções específicas;
- Geração dinâmica de páginas HTML - Os servlets podem ser instalados em servidores Web para processar informações transmitidas via HTTP a partir, por exemplo, de formulários HTML. As aplicações podem incluir acesso a banco de dados ou comunicação com outros servlets.
- N-Camadas (N-Tier) - Para a implementação de sistemas em n-camadas, podemos utilizar os servlets, nos quais são encapsuladas as regras e lógicas da aplicação.
- Threads - Os servlets utilizam threads, e como os servlets não precisam ser recriados a cada conexão, as aplicações rodam com maior velocidade e causam menor overhead na máquina.
ARQUITETURA DE UMA APLICAÇÃO SERVLET:
Servlet é um programa que estende a funcionalidade de um web server, gerando conteúdo dinâmico e interagindo com os clientes, utilizando o modelo request/response.
Os Servlets não são restritos ao modelo HTTP de request/response, apesar do modelo HTTP ser o modelo mais comumente utilizado.
Um Servlet pode ser considerado o cérebro da aplicação cliente servidor que utiliza JSP.
Segundo SILVA, o ciclo de vida de um Servlet é controlado pelo container:
Quando o servidor recebe uma requisição, esta é repassada para o container que a delega a um Servlet.
Então, o container: carrega a classe na memória; cria uma instância da classe do Servlet; e inicializa a instância chamando o método init();
Depois que o Servlet foi inicializado, cada requisição é executada em um método service();
Quando o container cria um objeto de requisição (ServletRequest) e de resposta (ServletResponse),e depois chama service() passando os objetos como parâmetros:
Public void service(ServletRequest, ServletResponse);
Quando a resposta é enviada, os objetos são destruídos;
Quando o container decidir remover o Servlet da memória, ele o finaliza chamando destroy().
PASSO A PASSO PARA CRIAÇÃO DE UM SERVLET: 
PASSO 1 
Criação da estrutura de diretórios
- Tomcat 6
- bin | Executáveis
- conf | Arquivos de configuração (server.xml)
- lib | Classpath do servidor para arquivos JAR
- logs | Logs para todas as aplicações
- webapps | Contém pastas de contexto (aplicações)
- work | Contém servlets gerados a partir de JSPs
PASSO 2
Código Fonte do Servlet.
Import javax.servlet.*;
Import javax.servlet.http.*;
Import java.io.*;
Import java.util.*;
Public class Exemplo extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response}
 throws ServletException, IOException {
 PrintWrite saida = response.getWriter();
 saida.println(“<html>”);
 saida.println(“<head>”);
 saida.println(“<title>Testando o Servlet</title>”);
 saida.println(“</head>”);
 saida.println(“<body>”);
 saida.println(“Bem vindo ao centro de teste Servlet”);
 saida.println(“</body>”);
 saida.println(“</html>”);
 }
}
Principais métodos:
doGet: chamado quando o navegador envia uma solicitação http, usando método GET.
doPost: chamado quando o navegador envia uma solicitação http, usando método POST.
Outros métodos: doDelete, doPut etc.
PASSO 3
Compilar o código fonte.
javac – classpath ????????? /lib/servlet-api.jar Exemplo.java
PASSO 4
Configurar o Servlet
O arquivo de configuração é chamado web.xml
Algumas vezes, existem vários deles. O que interessa está na pasta web-inf. Clique duas vezes nesse arquivo.
A aba Geral serve para indicar a descrição do sistema:
A aba Servlets configura itens importantes – Ordem de inicialização, Nome do Servlet, Classe do Servlet, Nome de acesso, essas e outras configurações podem ser feitas diretamente pela aba XML. Mas pelo NetBeans/Eclipse é mais conveniente.
PASSO 5
Executar o TomCat
./ startup.sh
PASSO 6
Chamar o Servlet a partir do navegador:
http://host_destino:numero_porta/Dominio/Nome_do_seu_Servlet
http://localhost:8080/app/Exemplo
Para essa aula, sugerimos que acesse:
Saiba mais sobre Servlets:
 Fundamentos de Servlets: http://www.devmedia.com.br/fundamentos-de-servlets/3573
 Java para Desenvolvimento Web: http://www.caelum.com.br/apostila-java-web/servlets/
EXERCICIO:
1. Analise as seguintes afirmações abaixo:
I. Pode-se afirmar que Servlet é um componente Web escrito em Java®, capaz de atender a solicitações no modelo requisição-resposta.
II. Quando um Servlet é executado, eventualmente, pode-se querer redirecionar o usuário para outra página/JSP ou mesmo outro Servlet. Para isso, é utilizado o comando forward.
III. Para escrever o código fonte de um Servlet, há necessidade deimportar os pacotes: javax.servlet e javax.servlet.http.
Assinale a alternativa que contém a(s) afirmação(ões) CORRETA(S).
1) Apenas I. 
2) Apenas II e III. 
3) Apenas I e III.
4) Apenas III. 
5) I, II e III. 
2. (EAOT 2009) Em relação aos Java Servlets, analise as assertivas e assinale a alternativa que aponta a(s) correta(s).
I. O GenericServlet é um servlet que independe do protocolo, enquanto que HttpServlet utiliza o protocolo HTTP para troca de informações entre cliente e servidor.
II. A classe HttpServlet apresenta o método service(). Este método aceita como parâmetro um objeto ServletRequest e um objeto ServletResponse.
III. A interface HttpServletRequest apresenta o método setContentType() que é o responsável por especificar o tipo de conteúdo da resposta para o navegador.
IV. O diretório de raiz de contexto de um Servlet é obrigatoriamente o local onde o Tomcat ou outro servidor web está instalado.
1) Apenas I está correta.
2) Apenas I e II estão corretas.
3) Apenas II e III estão corretas.
4) Apenas II, III e IV estão corretas.
5) I, II, III e IV. 
3. (CETRO 2012) Leia a afirmação abaixo, relacionada à Servlets e, em seguida, assinale a alternativa que preenche correta e respectivamente as lacunas.
Servlets são classes Java que estendem javax.servlet.http.HttpServlet, cujo Método ______ passa parâmetros pela URL adicionando-lhe um ? (sinal de interrogação), seguido pelo nome e pelo valor do parâmetro (nome=valor do parâmetro), separados (caso haja mais de um parâmetro) por & e para o Método ______ os parâmetros ______ na QueryString (URL com parâmetros ). Servlets, para serem acessíveis, tem que estar configuradas em um arquivo XML que deve ser nomeado de ______.
1) doPost/ doGet/ não são visíveis/ web.xml
2) doGet/ doPost/ não são visíveis/ web.xml
3) doPost/ doGet/ são visíveis/ servelet.xml
4) doGet/ doPost/ são visíveis/ servelet.xml
5) doGet/ doPost/ são visíveis/ web.xml
4. (UFT/COPESE - 2012) Sobre a plataforma Java Enterprise Edition, a alternativa que apresenta somente exemplos de componentes Web que rodam no lado do servidor é:
1) JavaBeans, JavaServer Faces e applets
2) applets, JavaServer Faces e JavaServer Pages
3) Java Servlet, applets e JavaServer Pages
4) Java Servlet, JavaServer Faces e JavaServer Pages
5) applets, JavaBeans e JavaServer Pages
5. (FCC- 2007) O software Apache Tomcat é um servidor de páginas dinâmicas web que:
1) está disponível apenas para as plataformas Windows e Linux.
2) implementa a API de Servlets e JavaServer Pages mas exige a integração com servidores http para prover páginas e recursos estáticos.
3) apesar de gratuito, seu código fonte não é aberto (open-source).
4) implementa a API de Servlets e JavaServer Pages e pode atuar diretamente como servidor http.
5) implementa a API de Servlets, JavaServer Pages e Enterprise Java Beans e pode atuar diretamente como servidor http.
RESPOSTA: 3, 2, 2, 4, 4.
Aula 4 – Tecnologia JSP
FUNDAMENTOS DA TECNOLOGIA JSP:
JSP (Java Server Pages) é uma tecnologia web-scripting para desenvolvimento de aplicações Web, similar às tecnologias Active Server Pages (Asp) da Microsoft® e PHP. 
Faz parte da família de tecnologias Java. Páginas JSP são compiladas em servlets e podem chamar componentes JavaBeans (beans) ou componentes Enterprise JavaBeans (enterprise beans), para a realização do processamento no servidor. Pode-se afirmar que a tecnologia JSP é uma componente chave na arquitetura de alto escala para aplicações baseadas na Web, provendo um modo simplificado e dinâmico de gerar páginas Web que contêm um código dinamicamente gerado. 
CARACTERÍSTICAS GERAIS:
Sendo baseada na plataforma Java (uma das linguagens mais populares atualmente), seu código escrito em uma determinada arquitetura pode ser portado para qualquer outra. Além de ter uma enorme comunidade de desenvolvedores, ampla documentação e diversas bibliotecas e códigos prontos, dos quais o desenvolvedor pode usufruir.
Permite ao desenvolvedor Web produzir aplicações que acessem banco de dados, manipulem arquivos no formato texto, capturem informações, a partir de formulários e captem informações sobre o visitante e sobre o servidor.
- Facilmente codificado, facilitando a elaboração e manutenção da aplicação Web.
- Permite a separação da programação lógica (parte dinâmica) da programação visual (parte estática).
- Torna possível uma distribuição de carga de processamento de aplicações desenvolvidas em diversos servidores, sendo que servidores podem ser adicionados ou removidos de maneira a acompanhar o aumento ou decréscimo dessa carga de processamento (escalabilidade).
ARQUITETURA JSP: Página JSP é uma página construída por um desenvolvedor Web que inclui a tecnologia JSP e tags específicas, combinadas com outras tags estáticas (HTML ou XML). Uma página JSP tem a extensão .jps ou .jspx; o quê informa ao servidor Web que um engine (motor) irá processar e codificar os elementos presentes nessa página. 
Utilizam tags XML e scriplets escritos na linguagem Java para encapsular a lógica que gera o conteúdo para a página. Isso envia qualquer tag de formatação (HTML ou XML) de volta à página de resposta. Assim, páginas JSP separam a lógica da página de seu design e de sua exibição.
Uma página JSP é compilada quando o usuário a carrega em Web browser.
PASSO A PASSO PARA A COMPILAÇÃO DE UMA PÁGINA JSP:
Pode-se afirmar que uma aplicação JSP, normalmente, é uma coleção de arquivos JSP, arquivos HTML, gráficos e outras fontes. Então, quando o usuário carrega a página pela primeira vez, os arquivos (os quais compõem a aplicação) são traduzidos (sem qualquer dado dinâmico), para um único arquivo fonte Java (.java), com o nome definido pela sua aplicação JSP.
Posteriormente, o arquivo .java é compilado em um arquivo .class. Usualmente, o arquivo .java é um servlet Java, que está de acordo com a API Java Servlet. Essa fase é conhecida como "tempo de tradução" (translation time).
Quando um usuário realiza uma solicitação (request) à aplicação JSP, um ou mais de um dos componentes da aplicação (bean, enterprise bean ou servlet) manipula(m) os dados que o usuário submeteu; ou recupera(m) os dados dinamicamente de um repositório de dados e retorna(m) os mesmos para um arquivo .java. Esse último arquivo, por sua vez, é recompilado em um arquivo .class.
O arquivo .class, sendo um servlet Java, retorna os dados para o Web browser do cliente através do seu método service.
Quando o usuário faz uma nova solicitação, o componente obtém ou manipula os dados novamente e os retorna para o arquivo .java. Esse último arquivo, mais uma vez é compilado em um arquivo .class. Essa etapa é conhecida como "tempo de solicitação" (request time).
As informações que um usuário envia, por exemplo, através de um formulário HTML são armazenadas em um objeto request, que as envia do cliente para um container JSP.
O container JSP envia o objeto request para o componente (beans, enterprise bean ou servlet) especificado pelo arquivo JSP.
O componente manipula o request, possivelmente recuperando dados de um banco de dados ou de outro tipo de repositório, e, então, envia um objeto response de volta para o container JSP.
SINTAXE E SEMÂNTICA JSP:
JSP podem ser vistas como documentos HTML ou XML com scripts JSP encaixados
● Elementos de script JSP permitem inserir código Java na Servlet gerada
● A maneira mais simples de tornar a JSP dinâmica é pelo encaixe direto de elementos script no modelo de dados
● Elementos script JSP:
 – Scriptlets
 – Expressões
 – Declarações
SCRIPTLETS:
● Inserir diretamente código Java:
		<% Java code; %>
– Qualquer código Java que poderia ser utilizado dentro de um método
● Útil para encaixar códigos simples
● Nenhum limite específico a respeito da complexidade de códigos
EXPRESSÕES:
● Fornece um meio de inserirvalores Java diretamente na saída:
<%= Java Expression %>
● Note que o ponto-e-vírgula ( ; ) não aparece no final do código dentro da tag
● Desde que elas são avaliadas em tempo de execução, as expressões têm acesso completo a informação sobre a requisição
● É mais simples que escrever:
out.println(Java Expression);
● Objetos pré-definidos, chamados objetos implícitos, se tornam disponíveis para os desenvolvedores JSP de modo a simplificar as expressões
● Exemplos:
– request: objeto da classe HttpServletRequest;
– response: objeto da classe HttpServletResponse;
– session: objeto da classe HttpSession associada ao request (se houver)
– out: objeto da classe PrintWriter, utilizada para enviar a
saída para o cliente.
 Exemplo:
Hostname: <%= request.getRemoteHost() %>
DECLARAÇÕES:
● Permite a definição de métodos ou variáveis
<%! Java Code %>
● Utilizada para encaixar código como as scriptlets
● São inseridas no corpo principal da classe servlet, fora do método _jspService() processando o request
– Vantagem: O código em uma declaração pode ser usado para declarar novos métodos e variáveis globais de classe
– Desvantagem: O código em declarações não é protegido
● Lembretes ao utilizar a tag de declaração:
– Iniciado por <%! e finalizado por %>
– As instruções devem seguir a sintaxe Java padrão
– Declarações não geram saída
● Desde que as declarações não geram nenhuma saída, elas normalmente são utilizadas em conjunto com expressões JSP ou scriptlets
ELEMENTOS BÁSICOS DO JSP:
Páginas JSP podem ser configuradas por vários tipos de elementos que aperfeiçoam a apresentação dos dados para o cliente, assim como decrescem o labor da manutenção. Veremos agora os elementos básicos da tecnologia JSP:
DIRETIVA PAGE: Permite informar ao servidor, em tempo de tradução, algumas propriedades específicas da página, quando está estiver disponível. Pode-se afirmar que a forma pela qual esse processo é realizado é por meio de atributos da diretiva. Tais como:
- CONTENTTYPE – Define o tipo de conteúdo MIME para a resposta da página JSP. O valor padrão é “\text/HTML”, isto é, se este atributo não for definido, o tipo de conteúdo de resposta será este. EXEMPLO: <%@ page contentType=’ ‘xml”%>
- IMPORT – Possibilita a realização da importação de pacotes para que seja possível o acesso às classes destes pacotes em uma página JSP.
EXEMPLO: <%@ page import=’ ‘br.estacio.exatas.hipermidia.beans.*, Java.util.*”%>
- SESSION – Define os objetos de uma sessão que podem ser acessados pela página JSP.
O valor padrão é TRUE. EXEMPLO: <%@ page session=’ ‘true”%>
- ERRORPAGE – Define o destino de qualquer exceção lançada na página JSP que está sendo executada. EXEMPLO: <%@ page errorPage=’ ‘errors/error.jsp”%>
- ISELIGNORE: Define se uma página JSP suporta ou não o uso de linguagens de expressão (Expression Language – EL*). O valor padrão é false. EXEMPLO: <%@ page isELIgnored=’ ‘true”%>
- ISERRORPAGE – Define se uma página JSP pode expor uma exceção enviada para ela através do atributo errorPage. O valor padrão é false.
EXEMPLO: <%@ page isErrorPage=’ ‘true”%>
DIRETIVA INCLUDE: Em tempo de tradução, essa diretiva é utilizada para incluir um código ou texto oriundo de outra página JSP, como por exemplo, uma barra de navegação comum a várias páginas de uma aplicação. O único atributo dessa diretiva é o file o qual informa o arquivo que será incluído. EXEMPLO: <%@ include file=’ ‘menuBarNaveg.jsp”%>
Saiba mais sobre JSP: 
GONÇALVES, E. Desenvolvendo Aplicações Web com JSP, Servlets, JavaServer Faces, Hibernate, EJB 3 Persistence e Ajax. Rio de Janeiro: Ciência Moderna, 2007.
SIEIRA, K.; BASHAM, B. Use a Cabeça! Servlets & JSP. Rio de Janeiro: Alta Books, 2008. 
*Linguagem de Expressão (EL- Expression Language): tem por objetivo facilitar o acesso a objetos que seguem as regras de um componente JavaBean e seus atributos, por meio de uma sintaxe própria e fácil de ser entendida e utilizada. Assim, o desenvolvedor não precisa, obrigatoriamente, saber a sintaxe da linguagem Java. É possível desabilitá-la definindo o atributo isELIgnored da diretiva page como true.
1. No contexto do Desenvolvimento WEB JAVA, analise as afirmativas a seguir, a respeito da tecnologia JSP ("JavaServer Page"):
I. Disponibiliza uma tecnologia simples e rápida para criar páginas que exibem conteúdo gerado dinamicamente, define a interação entre o servidor e a página JSP, e descreve o formato e sintaxe da página.
II. Emprega servlets - programas escritos na linguagem Java e executados no servidor, em oposição aos applets, executados no browser do cliente.
III. Utiliza páginas JSP, com extensão. jsp ou .jspx, criadas pelo desenvolvedor da Web e que incluem especificações JSP e tags customizadas, em combinação com outras tags estáticas, HTML ou XML.
1) se somente a afirmativa I estiver correta.
2) se somente as afirmativas I e II estiverem corretas.
3) se somente as afirmativas I e III estiverem corretas.
4) se somente as afirmativas II e III estiverem corretas.
5) se todas as afirmativas estiverem corretas.
2. Considerando que o conteúdo do arquivo corresponde exatamente à sua extensão, assinale a alternativa que representa uma página Web estática:
1) .asp.
2) .jsp.
3) .php.
4) .htm.
5) .pdf.
5. Qual sintaxe abaixo é utilizada para a condicional SE no JSP?
1) if (expressão1){
comando;
}
2) if (expressão)
comando;
3) if expressão1 then comando
4) if (expressão){
comando
 }
5) SE (expressão1) {
comando
} 
R: 4, 4, 1.
Aula 5 – MIDDLEWARE JDBC
MIDDLEWARE: Trata-se de uma infraestrutura projetada para ajudar na gerência da complexidade e da heterogeneidade inerentes a sistemas distribuídos. Tem como objetivo interligar processos clientes a processos servidores, oferecendo um conjunto de serviços que visam diminuir a complexidade do processo de desenvolvimento de uma aplicação.
Um middleware situa-se entre vários sistemas operacionais e uma plataforma de programação distribuída, provendo abstrações de alto nível, as quais auxiliam no entendimento da estrutura. Frameworks de middleware disponibilizam serviços de infraestrutura, tornando possível aos desenvolvedores abstrair funcionalidades complexas, como por exemplo: concorrência, gerenciamento, heterogeneidade de plataforma, dentre outros.
ARQUITETURA CENTRALIZADA: Primeiramente, surgiu a arquitetura centralizada (“mainframe”), onde toda a inteligência é centralizada em um computador central que recebe a informação gerada pela captura da informação do usuário através de um terminal. Trata-se de uma arquitetura limitada por não suportar facilmente interfaces gráficas com o usuário (“Graphic User Interface” - GUI) e o acesso a múltiplos bancos de dados geograficamente dispersos.
ARQUITETURA DE ARQUIVO COMPARTILHADO: Com o aparecimento de redes conectando vários PCs, surgiu a arquitetura de arquivo compartilhado (file sharing). Nesta arquitetura, o servidor de arquivos envia arquivos da localização compartilhada para o ambiente da estação de trabalho. Neste local, o trabalho requisitado pelo usuário é então executado (incluindo a lógica e os dados). Esta arquitetura também apresenta restrições, pois o bom desempenho está vinculado a um número limitado tanto de compartilhamentos de arquivos como de volume de dados transferidos.
ARQUITETURA CLIENTE/SERVIDOR: Nesta arquitetura, um processo é responsável pela manutenção da informação (Servidor), enquanto que outro é responsável pela obtenção dos dados (Cliente). A comunicação cliente/servidor é baseada em troca de mensagens.
ARQUITETURA CLIENTE/SERVIDOR DE 2 CAMADAS (TWO TIER): 
cliente comunica-se diretamente com o servidor;
A base de dados fica no servidor;
As regras e a lógica da aplicação ficam no cliente;
Problema de manutenção - toda vez que uma aplicação for alterada,tanto bancos de dados como aplicações clientes precisam ser alteradas;
A aplicação cliente precisa ser instalada em todos os nós.
ARQUITETURA CLIENTE/SERVIDOR DE 3 CAMADAS (THREE TIER): 
Uma camada intermediária é criada entre o servidor e o cliente;
A função da camada intermediária é armazenar as regras do negócio e a lógica da aplicação;
cliente fica responsável apenas pela interface com o usuário;
Qualquer alteração na camada intermediária é imediatamente assumida por todas as aplicações e pelo banco de dados.
AMBIENTES DE MIDDLEWARE:
Uma organização com a necessidade de distribuir uma aplicação pode escolher entre construir um ambiente de trabalho (framework) para integração e desenvolvimento próprio ou utilizar produtos existentes no mercado que ofereçam ferramentas de integração e desenvolvimento. Os produtos existentes são baseados nas especificações CORBA da OMG, no DCE (Distributed Computing Environment) da OSF, no DCOM da Microsoft®, assim como, no RMI (Remote Method Invocation) da linguagem Java.
Estas ferramentas baseiam-se em diversas tecnologias, apresentam diferentes características, mas em alguns pontos elas são similares ou mesmo complementares.
MIDLEEWARE LAYERS:
Applications;
RMI, RPC and events;
Request reply protocol;
External data representation;
Operating System.
Middleware é um software intermediário que encapsula complexidade de determinada(s) tarefa(s).
MIDDLEWARE PARA BANCO DE DADOS JDBC: JDBC (Java Database Connector) é uma interface para acesso a banco de dados através de uma API definida em Java. 
 Sendo assim, aplicações, Applets, Servlets ou quaisquer outros programas Java podem:
• estabelecer conexão com base de dados;
• enviar comandos SQL, e processar resultados. 
A biblioteca da JBDC provê um conjunto de interfaces de acesso ao banco de dados. Uma implementação em particular dessas interfaces é chamada de driver. Os próprios fabricantes dos bancos de dados (ou terceiros) são quem implementam os drivers JDBC para cada banco de dados.
Cada banco de dados possui um driver JDBC específico (que é usado de forma padrão - JDBC). A API padrão do Java já vem com o driver JDBC-ODBC, que é uma ponte entre a aplicação Java e o banco através da configuração de um recurso ODBC na máquina.
Drivers de outros fornecedores devem ser adicionados ao CLASSPATH da aplicação para que seja possível a sua utilização.
Sendo assim, é possível alterar o driver utilizado e não afetar a aplicação.
TIPOS DE JDBC: 
TIPO 1 - Driver Ponte JDBC-ODBC: implementação nativa que conecta uma aplicação Java a um banco de dados através de ODBC configurado na máquina.
TIPO 2 - Driver API-Nativa Parcialmente Java: É uma “casca” sobre uma implementação nativa de um driver de acesso ao banco de dados.
- TIPO 3 -Driver Java c/ Net-Protocol: Utiliza um middleware para a conexão com o banco de dados.
TIPO 4 - Driver Java Puro: Driver totalmente implementado em Java.
ACESSANDO DADOS COM JDBC: As principais classes e interfaces do pacote java.sql são:
• DriverManager - gerencia o driver e cria uma conexão com o banco (java.sql.DriverManager);
Usar o método getConnection em DriverManager.
• Connection - classe que representa a conexão com o bando de dados (java.sql.Connection);
• Statement - controla e executa uma instrução SQL (java.sql.Statement);
Criamos um objeto da classe Statement para executar consultas SQL:
ExecuteQuery: tomada em comandos SELECT, retonando o resultado de operações como um objeto ResultSet.
ExecuteUpdate: tomada em comandos INSERT, UPDATE ou DELETE, retornando número de colunas afetadas como um tipo int.
• PreparedStatement - controla e executa, também, uma instrução SQL; 
• ResultSet - contém o conjunto de dados retornado por uma consulta SQL (java.sql.ResultSet);
Esse método pode ser visualizado como uma tabela. A informação é recuperada uma coluna por vez e o método mantém a coluna corrente. Para percorrer as linhas da tabela nesse método usamos o método next().
• ResultsetMetaData - classe que trata dos metadados do banco.
• DataSource - Abrange os detalhes de como obter uma conexão para o banco de dados. (javax.sql.DataSource). Modo recomendado para obter objeto connection (chamar o método getConnection() em uma instância de DataSource.).
A interface Connection possui os métodos para criar um Statement, fazer o commit ou rollback de uma transação, dentre outros.
As interfaces Statement e PreparedStatement possuem métodos para executar comandos SQL.
ResultSet possui método para recuperar os dados resultantes de uma consulta, além de retornar os metadados da consulta.
ResultsetMetaData apresenta métodos para recuperar as meta informações do banco.
USANDO JDBC: 
- PRIMEIRA ETAPA: Para que uma aplicação Java possa interagir com um banco de dados, uma conexão deve ser estabelecida da seguinte forma:
• Carregamento do driver JDBC específico;
• Criação da conexão com o banco de dados.
 Para um melhor entendimento:
1. Carregamento do driver: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
 
A String passada ao método forName() é o nome específico da classe que implementa o Driver JDBC de cada banco de dados. No exemplo acima está o nome do driver da ponte JDBC-ODBC. 
Cada driver possui um nome diferente. Para utilizar, deve-se consultar a documentação do fabricante.
2. Criação da conexão: 
Connection conn = DriverManager.getConnection(“url”,“usuario”,“senha”);
  
Após o carregamento do driver, a classe DriverManager é a responsável pela conexão ao banco e pela devolução do objeto Connection, o qual representa a conexão com o banco de dados.
ATENÇÃO: O parâmetro “url” também é específico de cada fornecedor de driver. Consulte a documentação do fabricante. Normalmente, na url são informados o IP ou nome do servidor, porta e o nome da base de dados. Os outros argumentos são o nome do usuário do banco e a senha de acesso.
- SEGUNDA ETAPA: Com a conexão estabelecida, pode-se interagir com o banco de dados de diversas maneiras: Inserção, alteração e retirada de registros;
• Busca de registros;
• Criação de tabelas.
 
A seguir, seguem alguns exemplos. Todos eles estão baseados no uso do driver JDBC fornecido pela Oracle®. Entretanto, os mesmos exemplos podem ser utilizados com qualquer banco de dados relacional que possua um driver JDBC, necessitando apenas trocar o nome do driver e a URL de conexão. 
Não esqueça que o JAR do driver JDBC (fornecido pelo fabricante) precisa ser disponibilizado no
CLASSPATH da aplicação.
EXERCÌCIO:
1.Em uma aplicação Java, se o carregador de classes não conseguir localizar a classe do driver de banco de dados para uma conexão JDBC, é lançada a exceção:
 1) java.lang.ClassNotFoundException.
 2) java.io.FileNotFoundException.
 3) java.lang.SecurityException.
 4) java.io.IOException.
 5) java.util.InputMismatchException
2. Para acesso a banco de dados em Java, utiliza-se uma API denominada JDBC. Cada fornecedor de banco de dados provê um driver JDBC para acesso ao seu banco. Quais são os tipos de driver e a sua semântica, previstos pela linguagem Java?
 1) Tipo 1 (driver Java acessa banco de dados através de protocolo nativo do servidor), Tipo 2 (driver acessa servidor através de middleware do banco de dados) e Tipo 3 (driver Java invoca driver ODBC nativo).
 2) Tipo 1 (driver Java invoca driver ODBC nativo), Tipo 2 (driver Java invoca API cliente proprietária), Tipo 3 (driver acessa servidor através de middleware do banco de dados) e Tipo 4 (driver Java acessa banco de dados através de protocolo nativo do servidor).
 3) Tipo 1 (driver Java invoca driver ODBC nativo) e Tipo 2 (driver Java invoca API cliente proprietária).
 4) Tipo 1 (driver Java acessa banco de dados através de protocolo nativo do servidor) e Tipo 2 (driver acessa servidor através de middleware do banco de dados).
 5)Tipo 1 (driver Java acessa banco de dados através de protocolo nativo do servidor), Tipo 2 (driver acessa servidor através de middleware do banco de dados), Tipo 3 (driver Java invoca driver ODBC nativo) e Tipo 4 (driver Java invoca API cliente proprietária). 
3. Com relação à Java Database Connectivity ou simplesmente JDBC, julgue os itens abaixo e marque a alternativa correta.
I - JDBC é um conjunto de classes e interfaces (API) escritas em Java que fazem o envio de instruções SQL para qualquer banco de dados relacional.
II - O driver JDBC é único não importando o banco de dados utilizado.
III - Uma das facilidades do JDBC é a possibilidade do uso de bancos de dados já instalados.
IV - Para cada banco de dados há um driver JDBC.
V - Drivers API-Nativos traduzem as chamadas JDBC para as chamadas da API cliente do banco de dados usado.
1) Apenas os itens II e III são verdadeiros.
 2) Apenas os itens I e III são verdadeiros.
 3) Apenas os itens I, III, IV e V são verdadeiros.
 4) Apenas os itens III, IV e V são verdadeiros.
 5) Todos os itens são verdadeiros.
4. O pacote "java.sql" da API Java consiste de um conjunto de classes e interfaces que permitem embutir o código SQL em métodos Java para acessar diversos SGBDs. 
Nesse contexto, considere os itens abaixo no que se refere às interfaces do pacote "java.sql" e marque a alternativa correta.
I - SQLData
II - ResultSet
III - Statement
IV - Connection
V - DriverManager
 1) Apenas os itens II, III e IV são verdadeiros.
 2) Apenas os itens I e III são verdadeiros.
 3) Apenas os itens I, II, III e IV são verdadeiros.
 4) Apenas os itens I, II, III e IV são verdadeiros.
 5) Apenas os itens I, II, III e IV são verdadeiros.
Gabarito: 1 /2 /3 /3
AULA 06 – PADRÕES DE DESENVOLVIMENTO:
PADRÕES DE PROJETOS: Padrões são soluções de eficiência já comprovada e amplamente utilizadas para a resolução de problemas comuns em projeto de software.
A aplicação de padrões é um exemplo de reuso de projeto, de ideias e soluções. O esforço extra gasto na fase de projeto é compensado pelos ganhos em flexibilidade e reuso. Devido à complexidade dos softwares desenvolvidos atualmente, os padrões de projetos facilitam muito a concepção dos sistemas. 
 
Os padrões de projetos facilitam a comunicação entre os desenvolvedores, facilitam a reutilização de projetos bem sucedidos, proporcionam uma maior tranquilidade quando for necessária a modificação de um projeto e tem documentado todas as suas características, aplicabilidades e soluções.
ESTRUTURA DE UM PADRÃO DE DESENVOLVIMENTO: Os principais atributos de uma boa descrição de um padrão de projeto são:
• NOME: Referência que descreve de forma bastante sucinta o padrão;
• PROBLEMA: (Motivação, intenção, aplicabilidade): apresenta o contexto do padrão e quando ele pode ser utilizado;
• SOLUÇÃO: Descreve a solução e os elementos que a compõem;
• CONSEQUÊNCIAS E PADRÕES RELACIONADOS: Análise dos resultados, das vantagens e desvantagens obtidas com a aplicação do padrão.
PADRÕES GOF: Gamma e seus colaboradores são conhecidos como a Gangue dos Quatro (Gang of Four, GoF). Os padrões GoF formam um catálogo de boas decisões de projeto. Trata-se de documentação de soluções obtidas através da experiência. Foram coletados de experiências de sucesso na indústria de software.
São organizados em famílias de padrões, conforme o esquema:
○ Padrões de criação : relacionados à criação de objetos.
○ Padrões estruturais : tratam das associações entre classes e 
objetos.
○ Padrões comportamentais : tratam das interações e divisões de responsabilidades entre as classes ou objetos.
ALGUNS EXEMPLOS:
- você quer garantir que uma classe tenha no máximo uma instância 
criada em determinado momento. – USE SINGLETON
- Como compatibilizo interfaces que normalmente não 
conseguiriam se integrar – USE UM ADAPTER
- Como criar objetos de maneira controlada - USE FACTORY
CRIAÇÃO:
Padrão Singleton –
Intenção: Garantir que uma classe só tenha uma única instância, e prover um ponto de acesso global a ela.
Motivação: Garantir que exista um determinado número X de objetos de uma classe.
Aplicabilidade: Havendo a necessidade de existir apenas uma instância de uma classe e essa instância deve dar acesso aos clientes através de um ponto bem conhecido.
Padrão Abstract Fatory –
Intenção: Fornecer uma interface para criação de objetos relacionados sem especificar as suas classes concretas.
Motivação: Considere uma aplicação com interface gráfica que é implementada para plataformas diferentes. As classes implementando os elementos gráficos não podem ser definidas estaticamente no código. Há necessidade de uma implementação diferente para cada ambiente. como, por exemplo, implementar diferentes aparências (look-and-feels).
Aplicabilidade: Use uma fábrica abstrata quando: Um sistema deve ser independente da forma como seus produtos são criados e representados.
ESTRUTURAIS:
Padrão Adapter (wrapper) – 
Intenção: Converter a interface de uma classe em outra interface, esperada pelos clientes. Permite que classes com interfaces incompatíveis trabalhem em conjunto.
Motivação: Algumas vezes uma classe não é reusavel porque sua interface não é compatível com a interface de uma aplicação de um domínio específico. A solução é criar um objeto adaptador, que encapsule e filtre as características peculiares da classe adaptada, fornecendo uma interface que a aplicação espera utilizar.
Aplicabilidade: Use o Padrão Adapter quando você quiser: Utilizar uma classe existente, e sua interface não for compatível com uma que você necessita. Criar uma classe reusável que coopera com classes não-relacionadas ou não previstas a priori, isto é, classes que não apresentam necessariamente interfaces compatíveis.
Padrão Bridge –
Intenção: Desacoplar uma abstração de sua implementação, de modo que as duas possam variar independentemente.
Motivação: Quando uma abstração pode ter várias implementações, a solução usual é acomodar todas as implementações através de herança. No entanto, herança liga de forma permanente uma abstração a uma implementação. O padrão Bridge permite colocar as abstrações e suas implementações em diferentes hierarquias de classes, e permite que variem de forma independente.
Aplicabilidade: Use Quando Quiser evitar ligação permanente entre uma abstração e sua implementação.
COMPORTAMENTAIS:
Padrão Observer –
Intenção: Definir uma dependência de um para muitos com um mecanismo de notificação de eventos.
Motivação: A mesma informação (modelo) pode ser exibida em diferentes formatos (visão) em paralelo.
Aplicabilidade: Quando uma abstração apresenta dois aspectos, um dependente do outro. Encapsulando estes aspectos em objetos separados permite que você os varie e reutilize de forma independente.
Padrão Strategy – 
Intenção: Define uma família de algoritmos, encapsula cada um, e os faz intercambiáveis. Permite que o algoritmo varie independentemente dos clientes que o utilizam.
Motivação: Alguns algoritmos se repetem com frequência, por isso devem ser isolados para facilitar a manutenção.
Aplicabilidade: Utilize quando alguns algoritmos se repetirem com frequência, por isso devem ser isolados para facilitar a manutenção. 
EXERCÌCIOS:
1.(ENADE 2011) Um Padrão de Projeto nomeia, abstrai e identifica os aspectos-chave de uma estrutura de projeto comum para torná-la útil para a criação de um projeto orientado a objetos reutilizáveis.(GAMMA, E., HELM, R., JOHNSON, R., VLISSIDES, J. Padrões de Projeto-Soluções Reutilizáveis de Software Orientado a Objetos. Porto Alegre: Bookman, 2000.) Em relação a Padrões de Projeto, analise as afirmações a seguir.
I. Prototype é um tipo de padrão estrutural.
II. Singleton tem por objetivos garantir que uma classe tenha ao menos uma instância e fornecer um ponto globalde acesso para ela.
III. Template Method tem por objetivo definir o esqueleto de um algoritmo em uma operação, postergando a definição de alguns passos para subclasses.
IV. Iterator fornece uma maneira de acessar sequencialmente os elementos de um objeto agregado sem expor sua representação subjacente.
É correto apenas o que se afirma em
 1) I.
 2) II.
 3) I e IV.
 4) II e III.
 5) III e IV.
 2. (Rosane Maria Martins) Analise as seguintes afirmações sobre Padrões de Projetos:
I. Os padrões documentam e explanam um problema importante que pode ocorrer no projeto ou
na implementação de uma aplicação e então discute a melhor solução prática para o problema.
II. Em termos de orientação a objetos, padrões de projeto identificam classes, instâncias, seus papéis, colaborações e a distribuição de responsabilidades. São, portanto, descrições de classes e
objetos que se comunicam, implementados a fim de solucionar um problema comum em um contexto específico.
III. São exemplos de padrões relacionados a Interfaces: Adapter, Composite e Façade.
É correto apenas o que se afirma em
 1) I.
 2) III.
3) I e IV.
4) II e III.
5) I, II e III.
3.(Rosane Maria Martins) Há 23 (vinte e três) padrões GoF classificados por intenção.
Associe as colunas abaixo:
Intenção Padrões
1) Interfaces ( ) Adapter
2) Responsabilidade ( ) Decorator
3) Construção ( ) Observer
4) Operações ( ) Prototype
5) Extensões ( ) Strategy
 ( ) Façade
O correto está em:
1) 5-1-4-2-3-3
 2) 1-5-2-3-4-1
3) 2-3-5-4-1-2
4) 4-1-5-4-3-2
5) 3-4-1-2-5-3
4.(Rosane Maria Martins) _______________: padrão cujo objetivo é converter a interface de uma classe em outra interface esperada pelos clientes. Ou seja, permite a comunicação entre classes que não poderiam trabalhar juntas devido à incompatibilidade de suas interfaces.
1) Adapter
2) Composite
3) State
4) Visitor
5) Builder
Gabarito: 5 / 5 / 2 / 1
AULA 07 – ARQUITETURA MVC MODELOS I E II, IMPLEMENTAÇÃO DE MVC MODELO II E GERENCIAMENTO DE SESSÃO E LOGIN
PADRÕES DE ARQUITETURA: Definem a estrutura do sistema, oferecendo uma visão de alto nível da estrutura do sistema. Providenciam um conjunto de subsistemas predefinidos, especificando os relacionamentos entre eles e estabelecendo regras para esses relacionamentos (fonte). Podemos citar como exemplos: Reflexão e MVC (Model-View-Controller).
PADRÃO MVC: O MVC foi um dos primeiros padrões identificados. Foi criado pela comunidade Smalltalk® em 1979 e, mesmo após todos esses anos, ainda é muito aplicado em aplicações interativas que necessitam de interfaces flexíveis. Tem por objetivo tornar a aplicação modular, facilitando a resolução de grandes problemas, transformando-os em outros menores que podem ser resolvidos mais facilmente, além de facilitar o planejamento do desenvolvimento. 
Modularidade consiste em dividir o software em componentes independentes.
O Padrão MVC sugere a separação entre o modelo, a visão e o controle de uma aplicação:
Arquitetura MVC:
VIEW (Interface com os clientes, apresentação das requisições) – VISÃO: Corresponde às classes de interface gráfica da aplicação. Pode ser uma página de Internet, uma aplicação desktop ou qualquer outro dispositivo que apresente dados ao usuário; 
CONTROLLER (Comportamento da Aplicação) – CONTROLE: Corresponde às classes que conectam o modelo à visão. Aqui estão todas as regras de negócio. Este componente é responsável por gerenciar todas as requisições realizadas pela visualização e as consultas ao modelo.
MODEL (Dados da Aplicação e Regras de negócio) – MODELO: orresponde às classes do domínio da aplicação. Ou seja, neste componente estão os dados pertinentes à aplicação. Este componente faz uma interface entre o repositório de dados e o Controle, podendo ser o núcleo da aplicação;
VANTAGENS E DESVANTAGENS DO MVC:
Vantagens: Desenvolvimento de módulos de forma individual; Manutenção simplificada; Gerência de várias interfaces em uma mesma base de dados.
Desvantagens: Requer um tempo maior para análise e modelagem do sistema, exigindo desenvolvedores especializados no assunto; Não é aconselhável para aplicações de pequeno porte.
UTILIZAÇÃO DE CAMADAS: o sucesso em aplicações orientadas a objetos está diretamente ligado à organização de aplicações em camadas e na utilização dos padrões utilizados pelo mercado.
- Aplicação de uma camada: na era do computador pessoal, uma aplicação era desenvolvida para ser utilizada em uma única maquina. Usualmente, esta aplicação possuía todas as funcionalidades em um único núcleo, com uma vasta quantidade de linhas de código, o que tornava a manutenção do software árdua. A interação do usuário, a lógica de negócio, o acesso aos dados estavam presentes em um único local, como demonstrado na figura.
Lógica de Apresentação
Lógica de Negócios
Acesso a Dados
- Aplicação de duas camadas: Nesta estrutura, o acesso à base de dados foi colocado em uma máquina especifica, ficando esta separada das máquinas que apenas executam as aplicações. 
Neste modelo, as estações dos clientes contem todas as lógicas das aplicações, o que gera um grande problema: para cada nova versão de uma determinada aplicação, se o sistema estiver instalado em n máquinas clientes, para que se atualize o software, terá de ser novamente instalado n vezes. A figura ao lado ilustra o MVC de duas camadas. 
Lógica de Apresentação
Lógica de Negócios
Acesso a Dados
- Aplicação de três Camadas: Com o avanço da Internet, houve um movimento para separar a lógica de negócio da interface com o usuário. Sendo assim, os usuários da Web podem acessar as aplicações sem a necessidade de instalá-las em suas máquinas.
A separação em camadas lógicas torna as aplicações mais flexíveis, permitindo que as partes possam ser modificadas de forma independente. As funcionalidades da camada de negócio podem ser divididas em classes e as mesmas podem ser agrupadas em pacotes ou componentes, reduzindo, assim, as dependências entre as classes e pacotes. A aplicação de três camadas transformou a arquitetura padrão para sistemas corporativos com base na Web. A figura ao lado exemplifica o MVC de três camadas.
Lógica de Apresentação
Lógica de Negócios
Acesso a Dados
MODELO MVC 1: Modelo formado apenas por páginas JSP e Beans. Deve ser utilizado no desenvolvimento de sistemas pequenos e simples, pois pode haver uma grande quantidade de código Java nas páginas JSP.
Browser a JSP (Request): Envio de uma requisição à página JSP;
JSP a JavaBeans (Aplication Server): A página JSP que foi solicitada cria e chama o bean para passar a requisição;
Aplication Server a Enterprise Server/Data Source: O bean faz conexão com o banco de dados e grava as informações;
JSP a Browser (Response): A página JSP responde ao navegador (browser) do usuário enviando a resposta à requisição.
MODELO MVC 2: Este modelo explora o que há de melhor em cada tecnologia, dividindo o desenvolvimento do sistema em duas partes: implementação e apresentação, além de adicionar um componente a mais em relação ao modelo MVC 1: os Servlets.
Browser a Controller Servlet (Request): Controlador recebe a requisição feita pelo navegador do usuário;
Controller Servlet a Model JavaBean e Enterprise Server/Data Source, que retorna para o Model JavaBean (Instantiate): Controlador cria o bean e repassa a requisição ao bean;
Controller Servlet a View JSP: Controlador escolhe a qual página JSP deve ser enviada a requisição;
Model JavaBean a View JSP: A página JSP acessa o bean para recuperar a requisição solicitada. Caso esteja no banco de dados, este é acessado também;
View JSP a Browser (Response): A resposta é visualizada pelo navegador do usuário que fez a requisição.
Pode-se destacar alguns passos paraa construção do modelo MVC 2, tais como:
1. Definir beans para representar os dados;
2. Usar um Servlets para tratar requisições;
3. Preencher os beans;
4. Armazenar o bean na requisição, sessão, ou no contexto do Servlets;
5. Encaminhar a requisição para uma página JSP; 
6. Extrair os dados dos beans.
 
Esta divisão facilita o controle de tarefas e ação realizadas pela implementação do sistema.
REDES DE PETRI NA MODELAGEM DE SISTEMAS WEB: Rede de Petri é uma ferramenta para a modelagem e projeto de sistemas, utilizando uma representação matemática do sistema, sendo uma extensão das máquinas de estados finitos.
A análise da rede de Petri permite avaliar a estrutura e o comportamento dinâmico do sistema modelado. O resultado desta avaliação pode levar a melhorias ou mudanças no sistema.
 
A representação gráfica de uma rede de Petri básica é formada por dois componentes: um ativo chamado de transição (barra) e outro passivo denominado lugar (círculo). Os lugares equivalem às variáveis de estado e as transições correspondem às ações realizadas pelo sistema. Esses dois componentes são ligados entre si através de arcos dirigidos. Os arcos podem ser únicos ou múltiplos.
INTRODUÇÃO À SEGURANÇA: Existem alguns serviços que fundamentam as tecnologias de segurança:
○ Autenticação: processo de cerificar a identidade tanto do cliente como do provedor de serviço;
○ Privacidade: garantia de que os dados que estiverem trafegando entre a origem e o destino da comunicação não possam ser entendidos ou utilizados por terceiros;
○ Integridade: garantia de que os dados não foram alterados durante o processo de transmissão;
○ Autorização: processo de determinação de que uma determinada pessoa tem o direito de executar uma ação em particular, em relação a um objeto específico e em determinada situação; 
○ Não-repúdio: mecanismo pelo qual nenhuma das partes de uma negociação possa negar que a mesma ocorreu ou que participou dela.
CRIPTOGRAFIA: Do Grego kryptós, "escondido", e gráphein, "escrever”, a criptografia é o estudo e aplicação de técnicas que tem por objetivo transformar uma informação original e legível para outra completamente ilegível, que a torna difícil de ser lida por alguém não autorizado. Sua interpretação só pode ser feita caso seja conhecida sua "chave secreta".
 
Pode ser considerada como o processo de codificar informações de maneira que somente a origem e o destino da troca de mensagens possam entendê-los. Uma informação sem criptografia é chamada de texto claro, enquanto uma informação criptografada chama-se texto cifrado.
ATENÇÃO: Técnicas de criptografia são as mais utilizadas para prover um meio efetivo de proteção contra ataques, estejam armazenadas em disco ou sendo transmitidas pelas redes computacionais. A criptografia fornece determinados processos, serviços básicos de: autenticidade, confidencialidade, integridade e não repúdio para os dados a pessoas devidamente autorizadas. 
A criptografia tem como funcionalidade a alteração de uma mensagem original para outra cifrada. Para conseguir isso, a mensagem deve passar por um processo de cifragem, que consiste basicamente no emprego da mensagem a um mecanismo que, através de uma chave “específica”, cifre a mesma. Ou seja, após a mensagem ser empregada ao algoritmo de criptografia com esta chave secreta a mesma será totalmente alterada ficando completamente ilegível. E um processo contrário, que é a decifragem onde, novamente, através da chave específica, é possível a conversão dos dados cifrados para a mensagem original. A figura abaixo exemplifica a funcionalidade da criptografia:
Mensagem Mensagem Mensagem
Original-------------Cifragem--------Cifrada------------ Decifragem---------- Original
Atualmente, há dois tipos de criptografia:
SIMÉTRICA: A criptografia simétrica utiliza uma única chave no processo de criptografia, e esta chave deve ser mantida em segredo.
Tipo mais simples de criptografia, já que tanto o emissor quanto o receptor da mensagem possuem a mesma chave, ou seja, a mesma chave é usada tanto na codificação quanto na decodificação.
Para ser realizada, basta que o emissor, antes de enviar a mensagem criptografada, envie a chave privada que será utilizada para descriptografá-la.
Existem diversos algoritmos criptográficos que fazem uso da Chave Simétrica, tais como: DES (Data Encryption Standard); IDEA (Internacional Data Encryption Algorithm); e RC (Ron’s Code ou Rivest Cipher).
 A Chave Simétrica apresenta algumas desvantagens, tais como: necessidade da troca constante dessas chaves; e a impossibilidade de serem usados com fins de autentificação (já que a transmissão da chave privada de um para o outro pode não ser segura).
ASSIMÉTRICA: A criptografia assimétrica utiliza duas chaves, matematicamente relacionadas, sendo uma delas para encriptar e outra para decriptar. Uma das chaves é mantida em segredo, e a outra é divulgada.
Utiliza 2 (duas) chaves, uma pública e uma privada. O sistema funciona da forma que alguém cria uma chave e envia essa chave a quem quiser enviar informações (essa é a chamada chave pública). Com ela é feita a codificação da mensagem. Para decodificação será necessário utilizar outra chave que deve ser criada, a chave privada – que é secreta.
A Chave Assimétrica também possui suas desvantagens: a utilização de algoritmos reversos para desencriptação de mensagens acaba por elevar o tempo computacional dos algoritmos de criptografia assimétrica, tornando inviável o seu uso em uma comunicação intensa.
A principal diferença encontrada nas duas técnicas é com relação às chaves utilizadas. A criptografia simétrica utiliza somente uma chave para realizar o processo de cifragem e decifragem da mensagem e a assimétrica utiliza duas chaves, uma pública e outra privada, sendo uma utilizada para cifrar e a outra para decifrar a mensagem.
EXERCÍCIOS:
1.Servlets são projetadas para fornecer aos desenvolvedores uma solução JAVA para criar aplicações web. Para criar Servlets é necessário importar as classes padrão de extensão dos pacotes:
 1) javax.servlet e javax.servlet.http.
 2) javax.servlet e javax.http.servlet.
 3) javax.servlet.html e javax.servlet.http.
 4) servlet.javax e servlet.javax.http.
 5) javax.servlet.smtp e javax.servlet.html.
2.Segundo os padrões J2EE, em uma solução implementada as páginas JSP fazem parte da camada de(o):
 1) apresentação.
 2) integração.
 3) cliente.
 4) negócio.
 5) recurso.
3.Qual das opções abaixo apresenta um padrão J2EE da camada de negócios que trata do controle de acesso do cliente aos objetos de negócio e da limitação do tráfego de rede entre clientes remotos e serviços de negócio de granulação fina?
 1) Composite view.
 2) Data access object.
 3) Front controller.
 4) Session façade.
 5) Transfer object.
4.Sobre Criptografia, considere as afirmativas abaixo:
I. Pode-se afirmar que criptografia é qualquer mecanismo que transforma uma informação legível em ilegível e impede a leitura por pessoas não autorizadas.
II. A Criptografia de Chave Pública exige que o transmissor e o receptor compartilhem uma chave secreta.
III. Na Criptografia de Chave Simétrica, as chaves do transmissor e do receptor são diferentes.
O correto está em:
 1) I, apenas.
 2) I e II, apenas.
 3) III, apenas.
 4) II e III, apenas.
 5) I, II e III.
GABARITO: 1 / 1 / 4 / 2
AULA 08 – SINTAXE JAVASCRIPT; ORIENTAÇÃO À OBJETOS COM JAVASCRIPT
INTRODUÇÃO AO JAVASCRIPT:
H - HTML é uma linguagem declarativa (e não de programação) criada para estruturar páginas de hipertexto através de marcadores que descrevem a função de blocos de texto. HTML é uma linguagem voltada para definir a estrutura de documentos.
T - Não se trata, também, de uma linguagem de formatação, pois aaparência dos documentos não pode ser completamente controlada. Sendo necessária, assim, a utilização de linguagem complementar, como, por exemplo, Folhas de Estilo.
M - As linguagens Script vieram para atender a duas demandas em especial: processamento no lado cliente; e controle do navegador.
L - Sendo assim, hoje os documentos transferidos para as máquinas dos usuários podem possuir além das instruções HTML, programas inscritos em linguagem script. Estes scripts inseridos nas páginas HTML são, na maioria das vezes, utilizados para: validação de campos de formulários; execução de animações ou realização de efeitos visuais.
JavaScript é uma linguagem de programação interpretada (linguagem script) com características de orientação a objetos. Desenvolvida pela Netscape Communications Corporation® a fim de estender as capacidades de browser por ela desenvolvido. Permite que conteúdo executável seja incluído em páginas web. É sintaticamente semelhante a C e C++. 
 
Trata-se de uma linguagem que diferencia letras maiúsculas de minúsculas. Palavras-chave e identificadores (por exemplo, nomes de funções e de variáveis) devem ser escritos obedecendo a esta regra. Por exemplo, a palavra-chave function deve ser escrita exatamente dessa forma e não como Function ou FUNCTION.
TIPOS DE DADOS: 
- Tipos numéricos: Todos os valores numéricos são "declarados" pela simples atribuição dos valores a uma variável. Exemplos: 
Inteiros:
var x = 27; //atribuição na forma comum
var y = 0543; //notação octal que equivale a 357
- Indefinido: Na programação JavaScript, há 2 (dois) tipos de variáveis indefinidas:
• O primeiro tipo de variável indefinida é um tipo que nunca foi declarado. Ao tentarmos ler um valor dessa variável não declarada, haverá um erro em tempo de execução.
• O segundo tipo é aquela que foi declarada, entretanto nunca teve um valor atribuído a ela. Ao ler o valor de uma variável deste tipo, teremos seu valor default, padrão: undefined;
String: Sequência de caracteres. Em JavaScript; a string pode ser tanto um tipo primitivo de dado como um objeto.
Booleano: Uma variável do tipo booleano pode assumir apenas 2 (dois) valores: true e false. Os valores deste tipo são, geralmente, utilizados como resultado de comparações e podem ser usados pelo usuário para valores de teste ou para atributos que possuam apenas 2 (dois) estados. Equivale ao uso de um inteiro com valores 0 ou 1 na linguagem C. O JavaScript converte automaticamente true para 1 e false para 0 quando isso for necessário.
Null: Ausência de valor. Quando atribuímos null a um objeto ou variável significa que essa variável ou objeto não possui valor válido.
Arrays: pares do tipo inteiro-valor para se mapear valores a partir de um índice numérico. Os Arrays são objetos com métodos próprios.
• Exemplo: A coleção de nomes   ('Ana Cristina', 'Ana Lúcia', 'André Luiz', 'Andresa', 'Cilmara') pode ser criada da seguinte forma:
var aluno = new Array(5);
aluno[0]=’Ana Cristina’;
aluno[1]= 'Ana Lúcia';
aluno[2]= 'André Luiz';
aluno[3]= 'Andresa';
aluno[4]= 'Cilmara';
Arrays podem ser facilmente estendidos em JavaScript.
JAVASCRIPT - OPERADORES:
 ARITMÉTICOS
OPERADOR
OPERAÇÃO
EXEMPLO
+
Adição
x+y
-
Subtração
x-y
*
Multiplicação
x*y
/
Divisão
x/y
%
Módulo(resto da divisão)
x%y
- 
Inversão de sinal
-x
++
Incremento
x++ ou ++x
--
Decremento
x- -ou- -x
 COMPARAÇÃO
OPERADOR
FUNÇÃO
EXEMPLO
= =
Igual a
(x = = y)
! = 
Diferente de
(x ! = y)
= = =
Idêntico (igual e do mesmo tipo)
(x = = = y)
! = = 
Não idêntico a
(x ! = = y)
>
Maior que 
(x > y)
> =
Maior ou igual a
(x > = y)
<
Menor que 
(x < y)
< =
Menor ou igual a
(x < = y)
 BIT a BIT
OPERADOR
OPERAÇÃO
EXEMPLO
£
E (AND)
(x £ y)
|
OU (OR)
(x|y)
^
Ou Exclusivo (XOR)
(x ^y)
~
Negação (NOT)
~x
>>
Deslocamento à direita (com propagação de sinal).
(x >>2)
<<
Deslocamento à esquerda (preenchimento com zero).
(x <<1)
>>>
Deslocamento à direita (preenchimento com zero).
(x >>>3)
 ATRIBUIÇÃO
OPERADOR
EXEMPLO
EQUIVALENTE
= 
x = 2
Não possui
+ =
x += y
x = x + y
- =
x -= y
x = x - y
* =
x *= y
x = x * y
/=
x /= y
x = x / y
%=
x %= y
x = x % y
£=
x £ = y
x = x £ y
| =
x |= y
x = x | y
ˆ=
x ˆ= y
x = x ˆ y
>>=
x >>= y
x = x >>= y
<<=
x <<= y
x = x <<= y
>>>=
x >>>= y
x = x >>>= y
 LÓGICOS:
OPERADOR
FUNÇÃO
EXEMPLO
££
E logico
(x £ £ y)
| |
OU lógico
(x | | y)
!
Negação lógica
! x
ESTRUTURA DE CONTROLE: Existem algumas estruturas de controle que permitem a modificação do fluxo de execução de um programa. Elas permitem a execução do código baseado em condições lógicas ou um número determinado de vezes.
- If-Else: No código, se a expressão for avaliada como verdadeira, o primeiro bloco de comandos é executado. Caso seja avaliada como falsa, o bloco de comandos após o else será executado.
DICA: Os comandos If-Else e Switch são instruções que permitem a tomada de decisão se uma determinada condição for satisfeita.
- Switch... case: Esta instrução é bem semelhante a uma estrutura IF, porém é mais eficiente em razão de ser mais simples sua utilização e seu entendimento. 
- While: Esta instrução realiza uma ação enquanto determinada condição for satisfeita. Sua sintaxe básica é:
 
while (expressão) {
comandos
 }
 
Exemplo: No trecho de código abaixo, o laço while é repetido por 10 (dez) vezes: 
 
num=0;
while(num<10){
document.write("Número: "+num+"<br>");
num++;
}
- For: Esta instrução realiza uma ação até que determinada condição seja satisfeita. Sua sintaxe básica é:
 
for (início;condição;incremento) {
comandos
}
 
 Exemplo: Segue, abaixo, um exemplo prático de utilização do laço for que conta valores de 1 até 10, acrescentando um valor de cada vez: 
 
<script>
for (i=1 ; i<=10 ; i++){
document.write("número: "+ i +"<br>");
}
 </script>
JAVASCRIPT – FUNÇÕES: As funções podem ser definidas como um conjunto de instruções, agrupadas para executar uma determinada tarefa. Dentro de uma função pode existir uma chamada a outra função. As funções podem ou não retornar alguma informação, o que é feito com o comando Return. A definição de uma função é feita da seguinte forma:
 
Function NomeDaFunção([parâmetro1, parâmetro2, .... , parâmetroN])
{
...
[Return(ValorDeRetorno)]
  }
JAVASCRIPT – CAIXAS DE DIÁLOGO: 
- ALERT (mensagem): Mostra uma caixa de alerta (com o botão OK ) com a string "mensagem". Útil para depurar o script. Exemplo:
 
alert("Mensagem enviada!");
- CONFIRM (mensagem): Mostra uma caixa de diálogo com os botões "OK" e "Cancelar" e com a string "mensagem". Retorna true se selecionado "OK" ou false se selecionado "Cancelar". Exemplo:
 
if(confirm("Apaga todos os dados?")){
document.write("Apagando...");
} else {
document.write("Cancelado!");
}
- PROMPT (mensagem, resposta-padrão): Mostra uma caixa de diálogo, um campo de texto, e os botões "OK" e "Cancelar". Retorna a string digitada no campo de texto ou NULL se cancelado. Exemplo: 
nome=prompt("Digite seu nome, por favor:","Aluno");
if(!nome){
alert("Bem-vindo, anônimo!");
} else {
alert("Bem-vindo, caro(a) "+nome);
}
JAVASCRIPT – ORIENTAÇÃO À OBJETOS: Ao contrário de uma variável, um objeto pode conter diversos valores e de tipos diferentes nele armazenados (atributos). E, também, pode possuir funções que operem sobre esses valores (métodos). Tanto os atributos, quanto os métodos, são chamados de propriedadesdo objeto. Para criar um objeto, basta invocar seu construtor através do operador new.
Para acessar uma propriedade de um objeto, basta usar objeto.propriedade e no caso de métodos adicionar o operador ().
 
Podemos definir um construtor para um objeto, assim como, também, podemos inicializar atributos ao instanciar o objeto. Para que um construtor inicialize um atributo, ele precisa ser referenciado através da palavra-chave this.
- METODOS: 
- PROTOTYPES: Quando declaramos ou atribuímos um método no construtor de um objeto, ele ficará disponível para todas as instâncias criadas a partir desse construtor. Podemos fazer a mesma coisa com o uso da propriedade prototype. Tudo o que for definido no prototype de um objeto poderá ser referenciado por todas as instâncias desse objeto.
- ARRAYS ASSOCIATIVOS: array com objetos indexados por valores não numéricos:
EXERCÍCIOS: 
1.O código JavaScript a seguir tem o objetivo de validar um número de CPF. Se a validação for bem sucedida, o conteúdo da caixa de texto em que o CPF foi digitado será alterado para o valor formatado retornado pela função formataCPF(). As funções validaCPF() e formataCPF() são definidas em um arquivo JavaScript incluído na página que contém o formulário. Uma maneira correta de utilizar a função verificaCPF()em uma caixa de texto de um formulário HTML, para obter o comportamento descrito, é:
function verificaCPF(cpf) {
if (!validaCPF(cpf)) {
alert("CPF inválido!");
} else {
cpf.value = formataCPF(cpf);
}
}
 1) <input type="text" onChange="verificaCPF(cpf)" name="cpf">
 2) <input type="text" onChange="verificaCPF(self)" name="cpf">
 3) <input type="text" onChange="verificaCPF(this.form.cpf.value)" name="cpf">
 4) <input type="text" onChange="verificaCPF(this.value)" name="cpf">
 5) <input type="text" onChange="verificaCPF(this)" name="cpf">
2.Como deve ser codificada uma página HTML que tem por objetivo exibir no browser do cliente, através de código JavaScript, a data e a hora corrente?
 1) <html>
<script lang=”javascript”>
document.write(“<p>” + Time() + “</p>”);
</script>
</html>
 2) <html>
<script type=”text/javascript”>
Date();
</script>
</html>
 3) <html>
<language type=”javascript”>
document.write(“<p>” + Date() + “</p>”);
</language>
</html>
 
4) <html>
<javascript>
document.write(“<p>” + Date() + “</p>”);
</javascript>
</html>
 
5) <html>
<script type=”text/javascript”>
document.write(“<p>” + Date() + “</p>”);
</script>
</html>
3.As tecnologias Web utilizam linguagem de scripting JavaScript, linguagem de scripting ASP e applets Java para incluir aplicações, respectivamente, no lado:
 1) servidor, cliente e servidor.
 2) cliente, servidor e cliente.
 3) servidor, servidor e cliente.
 4) cliente, cliente e servidor.
 5) cliente, cliente e cliente.
4.No JavaScript, a caixa de mensagem "Alert":
 1) permite que o usuário insira um nome dentro da caixa de texto.
 2) permite que o usuário insira um número dentro da caixa de texto.
 3) solicita uma confirmação do usuário, positiva ou negativa.
 4) permite que o usuário insira um nome e/ou um número dentro da caixa de texto.
 5) exibe apenas uma informação para o usuário.
GABARITO: 5 / 5 / 2 / 5
AULA 09 – VALIDAÇÃO E CONTROLE DE FORMULÁRIOS: Por componentes de formulário nos referimos a qualquer campo de entrada de dados dentro de um bloco HTML <FORM>, como botões, caixas de seleção, caixas de texto e botões de “rádio”. Eles são a principal forma de entrada de dados disponível no HTML.
 
Os objetos de formulário consistem de 12 (doze) objetos, situados abaixo de Form, no modelo de objetos do documento JavaScript. São representados através de elementos HTML específicos: <INPUT>, <SELECT>, <OPTION> e <TEXTAREA>.
 
Uma das principais aplicações do JavaScript é a validação de dados em aplicações Web. Verificar se os campos de um formulário foram preenchidos corretamente antes de enviar os dados a um programa no servidor é uma tarefa realizada eficientemente com JavaScript. Na maior parte das aplicações, JavaScript é capaz de fazer toda a verificação localmente, economizando conexões de rede desnecessárias.
FORM: 
Veja abaixo a sintaxe do objeto Form em HTML. Todos os atributos (em itálico) são opcionais para uso em JavaScript:
 
<FORM
NAME="nome_do_formulário (usado por JavaScript)"
ACTION="url para onde será enviado o formulário"
METHOD="método HTTP (GET ou POST)"
ENCTYPE="formato de codificação"
TARGET="janela alvo de exibição da resposta do formulário"
ONRESET="código JavaScript"
ONSUBMIT="código JavaScript" >
... corpo do formulário ...
</FORM>
O objeto Form é o mais alto da hierarquia dos componentes de formulários. Através dele temos acesso aos componentes existentes dentro de um bloco HTML <form>, que podem ser: botões, caixas de texto, caixas de seleção, etc. Não há um objeto Form em JavaScript. Ele precisa estar presente no código HTML. Este bloco não é visível na página. Serve apenas para agrupar componentes de entrada de dados, torná-los visíveis e associar seus dados a um programa no servidor. Ou seja, para se acessar as propriedades de um formulário, é preciso ter acesso ao documento que o contém. Exemplo: Form1 = document.meuformulario;
Um documento pode conter vários formulários. Cada um é armazenado em uma posição de um array chamado forms. Exemplo: Form1 = document.forms[0];
COMO MANIPULAR UM FORMULÁRIO: 
aux = document.forms[0].propriedade;
document.forms[0].metodo();
aux = documents.meuforms.propriedade;
document.meuforms.metodo();
- Elementos de um Formulário: Incluem todos os elementos de formulário e imagens que estão contidas no bloco <FORM> da página HTML. Estes objetos podem ser referenciados pelos seus nomes – propriedades de Form criadas com o atributo NAME de cada componente, ou através da propriedade elements – vetor que contém todos os elementos contidos no bloco <FORM> na ordem em que aparecem no HTML.
- Métodos: São utilizados para submeter os dados ao programa no servidor ou para reinicializar o formulário com os seus valores originais. Podem habilitar outros botões (tipo Button) ou qualquer objeto do HTML que capture eventos que implementam a mesma funcionalidade dos botões <RESET> ou <SUBMIT>.
- Eventos: Reinicialização do formulário e envio dos dados ao servidor, desencadeados por botões Reset e Submit ou por instruções JavaScript.
São interceptados pelo código contido nos atributos HTML: ONSUBMIT ou ONRESET.
BOTÕES: O HTML disponibiliza 3 (três) tipos de botões: Button, Reset e Submit. Possuem a mesma aparência na tela, entretanto efeitos diferentes quando apertados. Submit e Reset possuem eventos já definidos pelo HTML para enviar e limpar o formulário ao qual pertencem. Button é inoperante a menos que possua um atributo de eventos ONCLICK, com o código que será interpretado quando o usuário apertá-lo. 
 
<INPUT TYPE="button"
NAME="nome_do_botão"
VALUE="rótulo do botão"
ONCLICK="Código JavaScript"
ONFOCUS="Código JavaScript"
ONBLUR="Código JavaScript">
- Button, Reset e Submit: Os métodos dos botões Submit, Reset e Button estão associados a eventos específicos:
• click(): Executa o código associado a onclick sem que o botão tenha sido clicado;
• focus(): Ativa o botão;
• blur(): Desativa o botão.
CAMPOS DE TEXTO: Os objetos do tipo Password, Text e Textarea são usados para entrada de texto. Possuem as mesmas propriedades. 
 
Os objetos Text e Password definem caixas de texto de uma única linha enquanto que os objetos Textarea realizam quebras de linha.
OBJETOS CHECKBOX E RADIO: Representam dispositivos de entrada booleanos cuja informação relevante consiste em saber se uma opção foi selecionada ou não. A diferença entre os dois são a aparência na telado browser e a quantidade de elementos que podem ser escolhidos para cada grupo de dispositivos.
SELECT E OPTION: Representa um grupo de opções; um ou mais elementos podem ser selecionados.
Caixas e listas de seleção como as mostradas na figura acima são representadas em JavaScript por objetos Select, que refletem o elemento HTML <SELECT>. Um objeto Select pode ter uma ou mais objetos Option, que refletem elementos <OPTION>.
OPTION não é considerado um elemento do formulário (elements). O acesso é realizado através do vetor options de select: 
Propriedades do Objeto Select:
VALIDAÇÃO DE FORMULÁRIOS: Exemplo 1: 
Criação do formulário e dos campos onde o usuário entrará com os dados. Os campos devem ser nomeados corretamente para que a validação possa ser realizada.
Note que, na declaração do formulário, temos um OnSubmit. Ele serve para chamar a função Javascript responsável pela validação. Caso todos os campos estejam preenchidos corretamente ele redireciona para o action.
OBJETO FILE (ou FILEUPLOAD4): Representa um dispositivo de entrada que permite o envio de um arquivo no cliente ao servidor. 
 O objeto File é criado em HTML através de um elemento <INPUT>. A sintaxe geral do componente está mostrada abaixo:
 
<INPUT TYPE="file"
NAME="nome_do_componente"
ONBLUR="código JavaScript"
ONFOCUS="código JavaScript"
ONCHANGE="código JavaScript" >
 
 
Um objeto File só poderá ser manipulado em JavaScript se seu descritor <INPUT> estiver dentro de um bloco <FORM>...</FORM>. Como qualquer outro componente, é um elemento do formulário e pode ser acessado através do vetor elements, ou através do seu nome, especificado pelo atributo NAME. O trecho de código abaixo mostra como acessar um elemento File chamado nomeFup e que é o sétimo elemento do primeiro formulário de uma página: 
fup = document.forms[0].nomeFup // ou ...
fup = document.forms[0].elements
Para que seja possível a transferência de arquivos, o servidor deverá permitir o recebimento de dados. O browser também deve passar os dados ao servidor usando o método de requisição POST e no formato multipart/form-data, que pode ser definido através do atributo ENCTYPE de <FORM> ou na propriedade encoding, de Form:
 
<FORM ENCTYPE="multipart/form-data" ACTION="..." METHOD="POST">
<INPUT TYPE="file">
</FORM>
  
Todas as propriedades dos objetos File são somente-leitura. Estão listadas na tabela abaixo:
File só possui os dois métodos listados abaixo. Ambos provocam eventos de ativação/desativação do componente.
Método
Ação
Focus()
Ativa o botão
Blur()
Desativa o botão
Eventos
 Os eventos suportados são dois. Os atributos HTML abaixo respondem aos eventos interpretando o código JavaScript contido neles:
• ONFOCUS – quando o usuário seleciona a caixa de textos ou o botão de File.
• ONBLUR – quando o usuário, que tinha o coponente selecionado, seleciona outro componente.
EXERCÍCIOS:
1.Qual das alternativas a seguir contém um comando JavaScript que permite escrever um texto em uma página, a ser exercida por um browser?
 1) document.print(“Brasil 2014”).
 2) document.println(“Brasil 2014”).
 3) document.put(“Brasil 2014”).
 4) document.send(“Brasil 2014”).
 5) document.write(“Brasil 2014”).
2.Em relação a Javascript, assinale a opção correta.
 1) Javascript é uma linguagem interpretada que requer compilação prévia.
 2) Javascript precisa se comunicar com um servidor web para poder validar dados preenchidos em um formulário.
 3) Um script Javascript pode reagir a eventos; por exemplo, pode ser executado quando uma página termina de carregar no navegador Web ou quando um usuário seleciona um elemento HTML.
 4) Assim como HTML, Javascript não é sensível a maiúsculas e minúsculas.
 5) Trechos Javascript devem ser inseridos somente na seção <head> de um documento HTML. A seção <body> não deve ser utilizada para esse fim.
 
3.Sobre formulários, considere as afirmativas abaixo:
I. Os métodos do objeto Form são utilizados para submeter os dados ao programa no servidor ou reinicializar o formulário com os seus valores originais.
II. As propriedades do objeto Form incluem todos os elementos de formulário e imagens que estão dentro do bloco <FORM> na página HTML.
III. Os eventos relacionados ao objeto Form são a reinicialização do formulário e o envio dos dados ao servidor, desencadeados por botões Reset e Submit ou por instruções JavaScript.
O CORRETO está em:
 1) I, apenas.
 2) II e III, apenas.
 3) III, apenas.
 4) I e III, apenas.
 5) I, II e III.
4.Sobre formulários, considere as afirmativas abaixo:
I. Cada formulário criado em uma página HTML é considerado um objeto distinto, tendo suas próprias referências, métodos, propriedades e eventos associados.
II. A forma de acessar diferenciadamente os formulários dentro da página HTML é utilizar a propriedade form do objeto document.
III. GET | POST são métodos para referências dentro da página HTML.
O CORRETO está em:
 1) I, apenas.
 2) I e II, apenas.
 3) III, apenas.
 4) I e III, apenas.
 5) I, II e III.
GABARITO:5 / 3 / 5 / 2
AULA 10 – AJAX
INTRODUÇÃO AO AJAX: O AJAX surgiu para resolver um problema que ocorre desde o surgimento da Internet: que é o de que a interação é feita de forma síncrona, ou seja, exige-se que, para cada solicitação em uma página Web, atualize-se a página inteira no navegador. Não importava se a atualização era só de uma pequena parte da página, toda a página era recebida pelo servidor e a página era toda redesenhada e retornada para o navegador Web.
Os princípios do Ajax separam elegantemente o cliente do servidor e podem ser utilizados com qualquer linguagem server-side. O Ajax (Asynchronous JavaScript +XML) é um nome relativamente novo, criado por Jesse James Garret, da Adaptive Path. 
 
Utilizado inicialmente pelo Microsoft Internet Explorer® e adotado posteriormente pelos demais navegadores, o AJAX é uma forma arrojada de uso de Javascript e XML que permite a criação de um objeto Ajax (Javascript). Este objeto consegue acessar outra página e receber o retorno de informação (sem sair da primeira página).
 A informação recebida pode ser tratada dentro do código (da página onde o objeto existe), permitindo ao desenvolvedor uma maneira progressista na criação de sua interface, de forma a enriquecer e agilizar a experiência do usuário dentro do sistema.
Uma das características deste objeto é que o mesmo pode comportar-se de uma forma assíncrona em relação à página HTML. Ou seja, enquanto a página continua a ser carregada (parcial ou totalmente), o objeto funciona em paralelo, correspondendo-se com a página destino até receber a informação desejada (ou algum erro ocorrer). [Fonte]
 
Antes do surgimento do AJAX, alguns subterfúgios eram utilizados para amenizar esse problema. A utilização de pré-carregamento dos dados, frames e iframes nunca resolveram o problema da maneira mais eficiente. Em alguns casos, apenas davam a falsa impressão de que a página não era toda atualizada, quando, na verdade, os dados já estavam carregados e apenas eram escondidos até serem necessários. Em outros casos (frames ou iframes), eram carregadas partes da página e, geralmente, trafegavam mais informações do que era realmente necessário. 
Com o AJAX pode-se trafegar apenas os dados que realmente foram atualizados em uma página Web e, assim, ganhar em desempenho e interatividade com o usuário. O seu uso é recomendado, principalmente, para páginas que utilizem validações e preenchimento de formulários.
EXEMPLIFICANDO O AJAX: Praticamente todos os navegadores, em suas últimas versões, são compatíveis com as técnicas utilizadas no AJAX, viabilizando o seu uso em qualquer aplicação Web. Na figura, pode-se visualizar a estrutura tradicional da Web com o fluxo das informações: toda a página Web é transferidaentre o servidor e o navegador cada vez que é solicitada qualquer informação da página.
FUNCIONAMENTO: Pode-se afirmar que o Ajax dá vazão a uma grande quantidade de potenciais não realizados nas tecnologias dos navegadores Web. 
 O Google e alguns outros dos principais competidores estão utilizando o Ajax para aumentar as expectativas do público em geral sobre o que um aplicativo Web pode fazer. 
 Com o Ajax, o fluxo de trabalho do usuário não é interrompido pela necessidade de se comunicar com o servidor. As solicitações são assíncronas. E isto significa que alguns recursos da página permanecem acessíveis enquanto a página (navegador) coleta novos dados do servidor. E isto significa, também, economia de largura de banda.
Pode-se concluir, portanto, que um aplicativo Ajax é um código que se comunica eficientemente com o servidor enquanto o usuário prossegue com seu trabalho.  
Exemplo:
• Carrega um arquivo chamado texto.txt.
• Insere seu conteúdo no DIV cujo id é texto.
MÉTODOS: open (mode, url, boolean): 
• mode é POST ou GET;
• url é o endereço, pode ser relativo;
• o último parâmetro é TRUE para conexão assíncrona e FALSE para conexão síncrona.
send(): método que ativa a conexão e faz a requisição de informações ao documento aberto pelo método OPEN;
ATRIBUTOS: status: status do retorno do html. São códigos padrões do HTML: 200 ok, 400 no found;
responseText: retorna a cadeia de caracteres que o servidor enviou;
onreadystatechange: define qual função será chamada para fazer a manipulação dos dados assim que houver um retorno;
readyState: código que informa o status da solicitação:
• 0 (uninitialized);
• 1 (a carregar);
• 2 (carregado);
• 3 (interactivo);
• 4 (completo).
ELEMENTOS CHAVE: Como já mencionado, o Ajax não é uma tecnologia única. Trata-se de uma coleção de quatro tecnologias que se complementam. A tabela a seguir ilustra essas tecnologias e o papel de cada uma:
- Javascript: Linguagem de criação de scripts de uso geral projetada para ser embutida nos navegadores através dos interpretadores JavaScript. Aplicativos Ajax são escritos em JavaScript.
- Document Object Model (DOM): O DOM apresenta a estrutura das páginas Web como um conjunto de objetos programáveis que pode ser manipulado com JavaScript, permitindo modificar
a interface instantaneamente e programaticamente, redesenhando partes
da página.
- Cascading Style Sheets (CSS): Em um aplicativo Ajax, a estilização de uma interface com o usuário pode ser modificada interativamente por meio de CSS.
- Objeto XML HttpRequest: Este objeto permite recuperar dados do servidor Web em segundo plano. O formato geral dos dados é baseado em XML, mas funciona bem com quaisquer dados baseados em texto. Além desta ferramenta, é possível buscar dados do servidor de outras maneiras.
Três das quatro tecnologias (CSS, Javascript e DOM) têm sido referidas coletivamente como Dynamic HTML, ou abreviando, DHTML. A DHTML era, em 1997, a grande promessa sobre a evolução de páginas Web. Oferecia a capacidade de criar interfaces interativas não convencionais para páginas Web, mas mesmo assim nunca superou o problema da atualização de página inteira. O Ajax usa maciçamente a DHTML, mas acrescentando as solicitações assíncronas, ele pode estender a longevidade de uma página Web consideravelmente. 
Todas essas tecnologias já estão pré-instaladas nos navegadores Web mais modernos, incluindo o Microsoft Internet Explorer, a família dos navegadores Mozilla, incluindo Firefox, Netscape, Opera, Safari da Apple e Konqueror.
Felizmente, existem maneiras de lidar com a incompatibilidade de múltiplos navegadores, mas são frustrantemente trabalhosas, apesar de que essa situação foi amenizada nos últimos anos. Os navegadores presentes em PDAs e Smartphones geralmente oferecem uma lista reduzida de recursos e não suportam a linha completa das tecnologias Ajax. Por enquanto, o Ajax é principalmente uma tecnologia para máquinas desktop e laptop. Até mesmo porque as telas reduzidas de PDAs e métodos de entrada provavelmente seriam um problema, mesmo se eles suportassem integralmente o Ajax.
EXERCÍCIOS: 
1.AJAX (do inglês Asynchronous Javascript And XML) tem sido largamente utilizado no desenvolvimento de aplicações WEB. Um dos conceitos centrais do AJAX é a possibilidade de serem feitas requisições ao servidor através de código Javascript, rodando no navegador do usuário. Esse recurso é empregado principalmente para permitir que:
 1) o processamento das regras de negócio da aplicação seja distribuído aos clientes, minimizando a carga do servidor.
 2) o usuário envie uma requisição assíncrona e verifique o resultado da mesma mais tarde, sem precisar aguardar pela resposta imediata do servidor.
 3) as páginas carreguem mais rapidamente, pois as requisições são paralelizadas e compactadas durante o trânsito.
 4) as páginas compostas diretamente em XML, ao invés de XHTML ou HTML, sejam apresentadas no navegador do usuário.
 5) partes de uma página web sejam atualizadas, sem que o browser recarregue a página inteira do servidor, proporcionando uma interface com melhor usabilidade.
 
2.Analise as seguintes afirmações acerca de AJAX:
I - Apenas as partes das páginas que são alteradas é que são carregadas.
II - Páginas são menos vulneráveis a problemas de compatibilidade.
III - O tráfego com o servidor é reduzido.
IV - As requisições de navegador são retornadas bem mais rapidamente.
 1) Apenas as afirmações I e II estão corretas.
 2) Apenas as afirmações III e IV estão corretas.
 3) Apenas as afirmações I, II e III estão corretas.
 4) Apenas as afirmações I, III e IV estão corretas.
 5) Todas as afirmações estão corretas.
3.Acrescentei a questão (E)) A empresa Google™ difundiu o uso da tecnologia AJAX quando lançou o seu serviço de email, o gmail. A ideia básica dessa tecnologia (AJAX) é um código escrito em:
 1) javascript, que realiza requisições ao servidor HTML de modo assíncrono.
 2) javascript, que realiza requisições ao servidor HTML de modo síncrono.
 3) PHP, que retorna requisições ao navegador do cliente de modo assíncrono.
 4) PHP, que retorna requisições ao navegador do cliente de modo síncrono.
 5) ASPNET, que retorna requisições ao navegador do cliente de modo síncrono.
GABARITO: 5 / 4 / 1
 ����������������������������������������������������������������������������������������������������������������
� EMBED PBrush ���
� EMBED PBrush ���
_1442751942/ole-[42, 4D, 76, 7C, 03, 00, 00, 00]
_1442752270/ole-[42, 4D, 46, 9C, 05, 00, 00, 00]

Mais conteúdos dessa disciplina