Buscar

DESENVOLVIMENTO DE SISTEMAS WEB

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 51 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 51 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 51 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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 a

Outros materiais