Buscar

teorico-mesclado

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

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

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ê viu 3, do total de 110 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

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

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ê viu 6, do total de 110 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

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

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ê viu 9, do total de 110 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

Prévia do material em texto

Sistema Servidor 
Cliente
Introdução a Cliente/Servidor
Material Teórico
Responsável pelo Conteúdo:
Prof. Esp. Marcio Funes
Revisão Técnica: 
Prof. Ms. Luiz Carlos Reis
Revisão Textual:
Profa. Ms. Luciene Oliveira da Costa Santos 
5
• Introdução
• Arquitetura de Sistemas
• Arquiteturas Centralizadas
O primeiro material a ser lido, que se encontra em Material Didático, é a Contextualização. 
Você deverá ler o conteúdo disponibilizado nesse link, cujo objetivo é apresentar um texto 
sobre o assunto que irá aprender, vinculando-o a situações cotidianas. 
Depois, você deverá ler o Conteúdo Teórico. Nesse material, você encontrará assuntos, como 
a definição de sistemas distribuídos para que você tenha uma visão geral da disciplina. Assim, 
poderá entender como as arquiteturas nos sistemas distribuídos estão presentes em nosso dia 
a dia. É importante que leia atentamente o conteúdo e consiga identificar a diferença entre 
arquiteturas centralizadas e descentralizadas e como elas aparecem em diversas situações.
Após estudar o texto, você deverá analisar o slide disponível. Nele, você poderá estudar os 
pontos relevantes sobre o assunto desta primeira aula.
Com esses conceitos já estudados, você estará pronto para participar do fórum e realizar as 
atividades. Primeiramente, você irá fazer a Atividade de Sistematização, depois a Atividade 
de Reflexão.
 · Nesta unidade, trabalharemos o seguinte tópico de conteúdo: 
 · Conceitos Iniciais: visão geral sobre o tema de Cliente/
Servidor; a importância de sistemas distribuídos e o papel das 
arquiteturas de sistemas distribuídos em nosso dia a dia.
Introdução a Cliente/Servidor
• Arquiteturas Descentralizadas
• Conclusão
6
Unidade: Introdução a Cliente Servidor
Contextualização
Em 1977, Ken Olsen presidente da Digital Equipment Corporation, segunda maior 
distribuidora de computadores do mundo na época (a primeira era a IBM), deu uma das mais 
interessantes respostas ligadas à tecnologia, que nos faz ter ideia da evolução e da mudança do 
pensamento de lá para cá.
Quando lhe foi perguntado por que a Digital Corporation não estava investindo em produzir 
computadores para o uso pessoal, a resposta foi enfática: “Não há razão alguma para qualquer 
individuo ter um computador em casa”.
Você já comprou algum computador da Digital Corporation? Já viu suas propagandas 
na televisão? Seria muito difícil, já que ela faliu há algum tempo. Nesse simples exemplo, 
podemos ver como o pensamento mudou. Para muitos, ter um computador em casa parecia 
absurdo, quanto mais produzir algum tipo de serviço ligado à tecnologia para pessoas comuns 
em suas casas.
Figura 1 – Computador doméstico TRS-80, 1977
Fonte: Wikimedia Commons
 Como exemplo dessa época, temos na Figura 1 o TRS-80 fabricado pela da Radio Sha-
ck, lançado em agosto de 1977 nos Estados Unidos. Ele tinha 4 quilobytes de memória, 
expansível para 12 quilobytes. Os dados eram armazenados numa fita cassete. Custava US$ 
600, com monitor.
Sabemos que isso mudou. Podemos, de nossas casas, comprar produtos, pagar contas, nos 
comunicar, ler, assistir a filmes e diversas outras atividades devido ao fato de, hoje, termos um 
computador em casa. Porém, apenas ter um computador em casa não basta, o sucesso de 
muitos serviços se dá pelo fato de podermos interligar computadores em rede, constituindo 
assim a Internet!
Porém, quais são os bastidores da Internet? O que existe por trás de apenas um simples clique 
de compra e de meu pedido processado no servidor da loja que estou comprando? Convidamos 
você a conhecer o Sistema Cliente / Servidor, que especificamente atua na interligação de 
computadores, permitindo que eles possam prover ou utilizar recursos e serviços entre si.
7
Introdução
Para que você entenda a importância de Sistemas Cliente/Servidor, é necessário entender em 
qual contexto ele está inserido. Isso é o que iremos ver neste capítulo.
Segundo Coulouris et al. (2007, p.15), um sistema distribuído é aquele no qual os 
componentes localizados em computadores interligados em rede se comunicam e coordenam 
suas ações apenas passando mensagens.
Figura 2 – Analogia sobre Sistemas Distribuídos
Por meio dessa definição, podemos entender que, para existir um sistema completo e 
distribuído à chave, isto é, interligação, quando conectamos componentes localizados em um 
computador, com o qual entendemos os softwares e hardwares, temos a possibilidade de realizar 
diversas ações. Como analogia a esse conceito, podemos ver na Figuras 2 como pequenas 
partes interligadas podem fazer grandes feitos.
A razão que move os Sistemas Distribuídos é o desejo por compartilhar recursos, desde 
compartilhar a mesma impressora que está ligada em rede a um escritório de uma empresa e 
possibilita que todos usufruam dela impressora, até compartilhar documentos, informações, 
serviços e dados.
Redes permitem interligar computadores não tendo como empecilho suas localizações 
geográficas. Atualmente, podemos conversar com um amigo que está na Rússia sem problema 
algum. Esse simples ato de comunicação com alguém que está a milhares de quilômetros 
exemplifica o maior sistema distribuído no mundo, a Internet.
Glossário
Sistemas Cliente/Servidor fazem parte de uma grande área de conhecimento que permite a 
todos nós benefícios com os serviços que as redes de computador podem fornecer. A essa 
grande área de conhecimento chamamos de Sistemas Distribuídos.
Sistemas Cliente/Servidor fazem parte de uma grande área de conhecimento que permite a 
8
Unidade: Introdução a Cliente Servidor
O maior sistema distribuído no mundo
A Internet é considerada o maior sistema distribuído no mundo, pois contêm diversos outros 
Sistemas Distribuídos em sua constituição. Permite que usuários compartilhem recursos da 
World Wide Web, e-mail, transferência de arquivos etc.
Abaixo, temos a explicação da Webopedia, sobre a diferença entre Internet e Web, disponível 
em <https://goo.gl/RO4gYX>. Podemos ver que, diferentemente do que muitas pessoas 
consideram, existem relevantes diferenças entre Internet e Web. Leia, abaixo, alguns pontos 
relevantes.
Muita gente usa os termos Internet e World Wide Web (ou apenas 
Web) indistintamente, mas de fato os dois termos não são sinônimos. A 
Internet e a Web são duas coisas separadas, embora relacionadas.
A Internet é uma gigantesca rede de redes, uma infraestrutura em rede. 
Ela conecta milhões de computadores globalmente, formando uma 
rede em que qualquer computador pode comunicar-se com qualquer 
outro computador desde que ambos estejam conectados à Internet. A 
informação que viaja pela Internet é feita por meio de uma variedade 
de linguagens conhecidas por protocolos.
A World Wide Web, ou simplesmente Web, é uma maneira de acessar 
informação por meio da Internet. É um modelo de compartilhamento 
de informações construído sobre a Internet. A Web usa o protocolo 
HTTP, que é apenas uma das linguagens utilizadas na Internet, para 
transmitir informações, e serve-se de browsers, como Internet Explorer, 
para acessar documentos chamados páginas (homepages), que estão 
ligados uns a outros por meio de hyperlinks. Documentos Web também 
contêm gráficos, sons, textos e vídeos.
A Web é apenas uma das maneiras pelas quais a informação pode ser 
disseminada pela Internet. A Internet, não a Web, é utilizada ainda para 
e-mail, Newsgroups, Instant Messaging e FTP. Portanto a Web é apenas 
uma parte da Internet, embora uma grande parte, mas os dois termos 
não são sinônimos e não devem ser confundidos.
9
Arquitetura de Sistemas
Quando pensamos em Sistemas Distribuídos, entendemos que o sucesso disso está em 
distribuir recursos, sendo essa a principal característica. Entendemos também que esses recursos 
estão distribuídos em diversos e diversos computadores, tornando assim, muitas vezes, complexa 
a sua organização.
Para que esse controle seja eficaz, há diferentes modos de organização de Sistemas 
Distribuídos, e a essa organização tão necessária damos o nomede Arquitetura de Sistemas. 
Uma das primeiras considerações que fazemos quanto à organização de Sistemas Distribuídos 
é diferenciar a organização lógica do conjunto de componentes de software e, por outro lado, a 
realização física propriamente dita. (TANENBAUM & VAN STEEN, 2007).
Veremos sua organização lógica abaixo e como podemos aplicá-la a um sistema através 
de camadas.
Estilo arquitetônico em camadas
Neste estilo, temos os componentes que fazem parte do Sistema Distribuído, organizados em 
camadas, criando assim uma comunicação linear.
Para que ela ocorra, temos a necessidade de três camadas básicas, que são: 
Figura 3 – Esquema de camadas
 · Camada de Apresentação: esta camada interage diretamente com o usuário ou 
outras aplicações; aqui pode destacar usuário acessando interfaces em navegadores, 
celulares, caixas eletrônicos e demais interfaces de comunicação. Figura 3 destaque na 
cor vermelha.
 · Camada de Negócio: aqui encontramos as regras que regem o sistema, as permissões 
que serão concedidas, como os dados devem ser tratados; enfim, aqui está a inteligência 
do sistema. Figura 3 destaque na cor verde.
 · Camada de Persistência: também conhecida como Camada de Dados, aqui 
encontramos os elementos responsáveis por armazenar as informações geradas na 
camada de negócios; quando invertemos o fluxo inicial das camadas, ela tem a função 
de fonte de dados para as demais camadas.
10
Unidade: Introdução a Cliente Servidor
Exemplo de Sistema Distribuído em camada
Ao analisar o simples acesso de um usuário ao site de e-commerce, por exemplo, do ponto 
de vista do estilo arquitetônico de camadas, temos:
1 - Usuário interage com o sistema distribuído através da Camada de Apresentação através 
de um navegador onde ele encontra os elementos gráficos do site (botões, cores, telas, 
menus etc).
2 - Ao escolher um produto para compra, entra em ação a Camada de Negócio que 
apresenta ao usuário as condições de compra do produto, forma de pagamento, valor 
do produto e demais informações pertinentes.
3 - Supondo que foi efetivada a compra, a Camada de Persistência armazena os dados 
gerados da compra, finalizando assim a interação entre as camadas.
Arquiteturas Centralizadas
Esse tipo de arquitetura existe quando temos a interação de dois elementos, os clientes e os 
servidores, objeto central de estudo desta disciplina:
 · Clientes: são processos que solicitam informações e serviços de um Servidor, enviando 
requisições dos mais variados tipos, logo em seguida, à espera da resposta do Servidor.
 · Servidor: são processos que fornecem algum tipo de informação ou serviço aos Clientes. 
Algumas vezes, um servidor poderá exercer o papel de um Cliente fazendo requisições 
a um Servidor.
Vejamos um exemplo:
Client Server 2
Client
Result Result
Invocation Invocation
Server 1
Process
Key:
Computer
 Figura 4 – Os clientes realizam pedidos aos servidores
Na Figura 4, temos um esquema gráfico dos clientes realizando pedidos ao servidor. Veja que 
a interação ocorre quando temos o envido de uma Invocation e a resposta pelo Result.
 · Invocation: a invocação acontece, por exemplo, quando um usuário abre um 
gerenciador de e-mail em sua máquina e realiza o pedido para ler seus e-mails; nesse 
momento, o processo cliente invoca os e-mails do servidor de e-mail.
 · Result: o resultado é a resposta do servidor à solicitação do processo cliente; utilizando 
o exemplo anterior, quando o servidor de e-mail recebe então a solicitação de acesso a 
uma conta de e-mail, pode enviar como resposta o pedido de autenticação de login e 
senha e, assim, dar sequência ao serviço solicitado pelo cliente.
11
Outro item interessante quando se trata de Cliente/Servidor é a utilização de camadas. Como 
vimos na Introdução, podemos dividir a arquitetura em camadas. Vimos que a utilização de 
três camadas (apresentação, negócio e persistência ou dados) pode ser muito interessante, pois, 
definimos o que cada camada deverá realizar. Cada camada segue sua função.
Aplicando agora a arquitetura em camada no conceito de Cliente/Servidor entendemos 
que a primeira camada Apresentação está no Cliente e por meio dela o usuário interage 
com o sistema.
Quando pensamos nas camadas de Negócio e Persistência, podemos atribuir sua função 
ao Servidor, que é a função de cuidar para que as duas camadas processem as Invocações do 
Cliente e forneçam uma Resposta ao usuário.
O ideal é utilizar três camadas para que o sistema Cliente/Servidor seja funcional, mas existe 
outra maneira de criar um sistema Cliente/Servidor apenas com 2 camadas, aplicando o conceito 
de cliente gordo e cliente magro.
 · Cliente Magro: quando o processo Cliente só possui uma obrigação, mostra as informações 
ao usuário e mais nada (toda a carga de processamento se encontra no Servidor).
 · Cliente Gordo: quando não temos o papel do Servidor para processar os dados, mostra 
as informações e as processa no Cliente / Servidor; apenas tem a função de armazenar 
os dados gerados no Cliente.
Arquitetura Descentralizada
Para quem viveu em 1999 e possuía um computador doméstico e uma conexão com a Internet, 
fazer download de uma simples música não era trabalho fácil, era necessário conhecimento em 
informática, domínio de algumas ferramentas (sim no plural) e bastante paciência.
Foi quando Shawn Fanning e Sean Parker tiveram a ideia de criar um sistema que facilitaria 
aos usuários conseguir suas músicas favoritas.
Como vimos até agora, sabemos que para que um sistema de download de música funcionasse 
era necessário então disponibilizar um servidor de arquivos para que os clientes pudessem fazer 
requisições de download. O hardware naquela época era mais caro que nos tempos atuais e a 
velocidade de conexão com a Internet não ajudava muito, seria necessário desembolsar muito 
dinheiro e mesmo assim os downloads corriam o risco de deixar um servidor lento devido à 
quantidade de downloads.
Qual solução poderia ser criada? Se pensarmos que, ao invés de centralizar esses arquivos 
de música em apenas um servidor, podemos aproveitar o fato que vários usuários têm 
músicas em seus computadores, assim teríamos vários e vários “mini servidores” espalhados 
por toda a rede, criando um sistema descentralizado no qual cada usuário disponibiliza as 
músicas que quiser.
12
Unidade: Introdução a Cliente Servidor
Surgiu assim o programa Napster, que facilitou e popularizou o 
download de músicas pela Internet e em 2001 e contava com 8 
milhões de usuários, gerando uma média de tráfego de 20 milhões 
por dia. Devido a várias ações legais de companhias da indústria 
fonográfica, fechou suas portas.
Esse exemplo demonstra a arquitetura descentralizada chamada Peer 
– to – peer ou apenas P2P, diferente do modelo Cliente / Servidor 
onde centralizamos a informação, o P2P espalha a informação e os 
todos os clientes têm o papel de cliente e servidores ao mesmo tempo.
Conclusão
Para melhor aproveitamento do capítulo, vejamos abaixo uma síntese do que foi visto até aqui:
• Entendemos que Sistemas Cliente/Servidor fazem parte de uma grande área de 
conhecimento chamada Sistemas Distribuídos e através dela podemos enviar e receber 
informações e serviços por uma rede de computadores.
• Vimos também que para organizar o modo como os Sistemas Distribuídos funcionam 
temos a Arquitetura de Sistemas que provê a maneira que os sistemas devem agir.
• Dentro das definições da Arquitetura de Sistemas temos a possibilidade de criar estilos 
arquitetônicos para Sistemas Distribuídos. Dentre esses estilos, temos um chamado Estilo 
Arquitetônico em Camadas, possuindo três camadas básicas:
◊ Camada de Apresentação
◊ Camada de Negócio
◊ Camada de Persistência (dados)
• Voltando ao tema central, além de estilos arquitetônicos, temos as arquiteturas que se 
utilizam dos estilos para se estruturarem. Dentre essas arquiteturas, temos a Arquitetura 
Centralizada que trata do tema Cliente/Servidor.
• No conceito de Arquitetura Centralizada temos a presençado Cliente e do Servidor, que 
podemos entender da seguinte forma:
◊ Cliente: solicita informações e serviços de um Servidor.
◊ Servidor: fornece informações e serviços aos Clientes.
• Além do conceito de Arquitetura Centralizada, temos a Arquitetura Descentralizada, 
que diferente do conceito de centralizar serviços e informações em um Servidor fazendo 
com que vários Clientes acessem um servidor realizando requisições, a Arquitetura 
Descentralizada prevê que um Cliente pode assumir o papel de Cliente e Servidor 
simultaneamente fazendo com que a informação fique espalhada pela rede.
Não é possível dizer qual arquitetura é melhor. Como cada arquitetura possui um modo de 
trabalho diferente, cada uma possui uma utilização diferente em situações diferentes. Ambas 
possuem suas vantagens e devem ser utilizadas para melhor eficiência de um Sistema Distribuído.
13
Material Complementar
Sugiro, também, a leitura completa do capitulo II do livro:
TANENBAUM, A.S.; VAN STEEN, M. Sistemas Distribuídos: Princípios 
e Paradigmas 2/E, Prentice Hall, 2007.
14
Unidade: Introdução a Cliente Servidor
Referências
TANENBAUM, A.S.; VAN STEEN, M. Sistemas Distribuídos: Princípios e Paradigmas 
2/E. Prentice Hall, 2007.
COULORIS, G.; DOLLIMORE, J. AND KINDBERG, T. Sistemas Distribuídos: Conceitos e 
Projeto 4/E. Bookman, 2007.
15
Anotações
www.cruzeirodosulvirtual.com.br
Campus Liberdade
Rua Galvão Bueno, 868
CEP 01506-000
São Paulo SP Brasil 
Tel: (55 11) 3385-3000
www.cruzeirodosulvirtual.com.br
Rua Galvão Bueno, 868
Tel: (55 11) 3385-3000
Sistema Servidor 
Cliente
Ambiente de programação distribuída
Material Teórico
Responsável pelo Conteúdo:
Prof Esp Marcio Funes
Revisão Técnica:
Prof. Ms. Luiz Carlos Reis
Revisão Textual:
Profa Ms. Luciene Oliveira da Costa Santos
5
• Sockets
• Corba
• Dcom
Nesta segunda unidade, você irá estudar os principais conceitos que ambientam a programação 
distribuída como sockets, corba, dcom, soap, Java RMI e Web Services. 
O primeiro material a ser lido, que se encontra no material didático, é a Contextualização. Você 
deverá ler o conteúdo disponibilizado nesse link, cujo objetivo é apresentar um texto, situando o 
assunto que irá aprender e vinculando-o a situações cotidianas. 
Depois, você deverá ler o conteúdo teórico. Nele, você encontrará os assuntos citados no parágrafo 
acima, com os quais serão definidos o conceito de cada tema e o modo de funcionamento geral 
de cada item. É importante que leia atentamente o conteúdo e consiga identificar a diferença entre 
cada ambiente de programação e seus aspectos de uso.
Após estudar o texto, você deverá analisar o slide disponível. Também por meio dele, você poderá 
estudar os pontos relevantes sobre o assunto desta primeira aula.
Com os conceitos já estudados, você estará pronto para participar do fórum e realizar as atividades. 
Primeiramente, você irá fazer a Atividade de Sistematização, depois, a Atividade de Reflexão.
Nesta unidade, falaremos sobre o ambiente necessário para a 
programação distribuída. Vamos entender quais são os conceitos 
relacionados ao ambiente que possibilitam desenvolvedores 
utilizarem os benefícios da computação distribuída. Isso é muito 
importante, pois você poderá utilizar tais conceitos em sua carreira.
Também é importante ver como as soluções de programação 
são criadas para um serviço, envolvendo máquinas que troquem 
informações e consigam manter um link e, principalmente, 
desenvolver a relação de Cliente e Servidor de forma confiável.
Ambiente de programação distribuída
• Soap
• Java RMI
• Web Service
6
Unidade: Ambiente de programação distribuída
Contextualização
Agora que já vimos os conceitos iniciais da tecnologia de sistemas cliente / servidor, podemos 
avançar e entender como os ambientes de programação distribuída funcionam. A compreensão 
de como a tecnologia distribuída em cliente / servidor acontece através das arquiteturas lhe 
permitirá agora entender como aplicamos esses conceitos dentro de ambientes de programação 
distribuída.
Para obter um bom aproveitamento com o estudo desta unidade, vamos conferir sua estrutura:
• Conteúdo Teórico: neste link, você encontrará o material principal de estudos na forma de 
texto escrito.
• Atividade de Sistematização: os exercícios disponibilizados são de autocorreção e visam 
a que você pratique o que aprendeu na disciplina e que identifique os pontos aos quais 
precisa prestar mais atenção, ou sobre os quais necessita pedir esclarecimentos a seu tutor. 
Além disso, as notas atribuídas aos exercícios serão parte de sua média final na disciplina.
• Atividade de Aprofundamento: é uma atividade dissertativa.
• Material Complementar: nestes links, você poderá ampliar seus conhecimentos.
• Vídeo-aula: nestes links, serão apresentadas algumas ferramentas na prática e também a 
resolução de alguns exercícios. 
Fique atento(a) à importância de realizar todas as atividades propostas dentro do prazo 
estabelecido para cada unidade, pois, dessa forma, você evitará que o conteúdo se acumule e 
problemas ao final do semestre.
Uma última recomendação: caso tenha problemas para acessar algum item da disciplina, 
ou dúvidas em relação ao conteúdo, não deixe de entrar em contato com seu professor tutor 
através do botão mensagens.
7
Sockets
Você já participou de algum bate papo na Internet? 
Provavelmente, a resposta será sim. Uma aplicação desse tipo é muito comum entre usuários 
de internet. Se você é mais veterano, deve se lembrar do ICQ, em 1996 (caso sinta saudades, 
aproveite, pois ele ainda está disponível para download), ou pelo Windows Messenger em 2008 
ou somente MSN para os íntimos. Exemplos atuais de bate-papo nos trazem ao Facebook ou 
através de aplicativo como o WhatsApp para aplicativos móveis.
Sabemos que comunicação de forma instantânea na internet é uma das suas maiores 
vantagens e essa possibilidade não irá desaparecer. O que pode ocorrer é a mudança do 
aplicativo ou serviço que utilizamos para comunicação.
Quero convidá-lo(a) a conhecer o que existe por trás do aplicativo que nos permite bater um 
papo e combinar uma festa no final de semana. Como programadores conseguem fazer com 
que mensagens saiam do meu aplicativo e cheguem ao seu destino?
A resposta será sockets, sim, sockets! E essas belezinhas não são usadas apenas em bate-
papo. Sockets são usados quando existe a necessidade de comunicar dois pontos e necessitam 
de estabilidade, rapidez e desempenho.
O que é um Socket?
É um serviço de transporte que permite a comunicação através do protocolo TCP entre 
clientes e servidores. Cada cliente e servidor possuem seu socket que irá possibilitar uma 
conexão fim a fim.
Podemos entender que sockets são terminais em uma conexão bidirecional, a mensagem sai 
de um computador ou aplicativo A e chega ao seu fim em um computador ou aplicativo B. Todo 
socket possui dois tipos de endereçamento:
Endereço Local: Endereço da porta de comunicação para a camada de transporte.
Endereço Global: Endereço do computador na rede.
Vamos entender como os sockets funcionam. Primeiro, vamos analisar a visão do servidor.
 
Servidor
Porta #
Soquete
Figura 1 – Socket associado a uma Porta
8
Unidade: Ambiente de programação distribuída
Temos, na Figura 1, um servidor que oferece algum serviço através de uma de suas portas. O 
socket associado a essa porta ficará “escutando” a porta, esperando que algum cliente ansioso 
faça sua solicitação.
Cliente
Porta #Servidor
Porta #
Soquete
Figura 2 – Cliente e suas requisições
O cliente então deve saber identificar o servidor e o número da porta em que o servidor 
aguarda comunicação. Para facilitar, imagine a ação de enviar um e-mail, quando abrimos o 
Gmail, por exemplo, o servidor fica atento que algum cliente solicite conexão; por sua vez, o 
servidor através de uma porta e um socket responde à solicitação, exigindo login e senha para 
poder fornecer os e-mails contidos em seu repositório.
Assim, ocorre uma ligaçãobidirecional, por meio de portas e sockets, se estabelece uma 
conexão e ambos podem se comunicar, como mostra a Figura 2.
Quando um servidor está disponível para receber solicitações e um cliente aceita a conexão 
oferecida são criados sockets em ambas as pontas, estabelecendo a comunicação e definindo as 
diretrizes que podem ser lidas e escritas em ambos os sockets, como podemos ver na Figura 3.
 
Cliente
Porta #Servidor
Porta #
Soquete
Soquete
Soquete
Figura 3 – Sockets conectados em ambas as pontas
9
Servidor
Po
rta
 #
Soquete
Soquete
Soquete
Soquete
...
Cliente
Porta #
Soquete
Cliente
Porta #
Soquete
Cliente
Porta #
Soquete
Cliente
Porta #
Soquete
Figura 4 – Exemplo de sockets em um bate-papo
Voltando ao exemplo do bate-papo, quando vários clientes necessitam acessar o mesmo 
servidor, são criados vários sockets para estabelecer uma conexão única e estável com cada 
cliente, como demonstrado na Figura 4.
Acesse: https://goo.gl/xzGmD
Esse tutorial disponibilizado pela Oracle, além de trazer várias informações sobre 
sockets, traz um tutorial passo a passo de programação de sockets em Java.
CORBA
Em meados de 1990, a tecnologia de comunicações e serviços via rede cada vez mais se 
expandiam, novos serviços se espalhavam, fazendo com que a procura por soluções distribuídas 
aumentasse cada vez mais.
Porém, havia um empecilho que poderia comprometer o crescimento dessas soluções. 
Não havia uma padronização única que permitisse que diversos tipos de sistemas distribuídos 
pudessem se comunicar. Muitas vezes, uma solução era implementada em uma determinada 
linguagem diferente de outra solução, impedindo ambas de não se comunicarem.
10
Unidade: Ambiente de programação distribuída
Em 1991, um grupo de empresas estabelece uma especificação de uma arquitetura chamada 
CORBA (Common Object Request Broker Architecture) que define padrões, permitindo que 
aplicações feitas por diferentes desenvolvedores se comunicassem sem nenhum problema. 
Desde então, ela é patrocinada pelo OMG (Object Management Group) grupo formado em 
1989, com o objetivo de estimular a adoção de sistemas de objetos distribuídos para usufruir das 
vantagens da programação orientada a objeto no desenvolvimento de softwares para sistemas 
distribuídos (COULOURIS et al., 2007, p.711).
Qual o segredo do CORBA?
Vimos acima que o grande sucesso do CORBA é possibilitar a diferentes soluções a 
comunicação em uma rede entre si. Mas como ele faz isso?
 
Cliente
Programa IDL ORB
Servidor
ORB POA Servente
Es
qu
el
et
oRequisições
Respostas
Requisições
Figura 5 – Principais componentes CORBA.
Analisando a Figura 5, podemos entender que o objetivo principal é permitir que o programa 
que está sendo executado na máquina do cliente possa solicitar requisições do servidor e usufruir 
de seus serviços como é característico do modelo Cliente / Servidor. Porém, tanto o programa 
quanto o servidor são diferentes em termos de desenvolvimento. Nesse contexto, temos que 
criar um Middleware, ou seja, um conjunto de elementos que irão mediar a comunicação entre 
o cliente e o servidor.
Vamos analisar agora cada elemento que compõe o CORBA.
• Programa: é a aplicação que o usuário tem acesso, ou seja, a aplicação que o usuário 
deseja utilizar.
• IDL (Interface Definition Language): uma linguagem para definição de interface que 
permite padronizar as chamadas aos métodos CORBA com o IDL não importando qual 
tecnologia seja executada, pois, quando ela passa pela IDL, é padronizada pelas definições 
CORBA.
• ORB (Object Request Broker): define as funções que um cliente irá utilizar e um 
servidor irá receber, ele terá a tarefa de interpretar aquilo que o cliente deseja e aquilo que 
é respondido pelo usuário, fazendo assim que servidor e cliente “falem” a mesma língua.
• POA (Portable Object Adapter): presente apenas no servidor, tem a função de ajudar o 
11
ORB na tarefa de entregar as requisições ao servente. Permite que sejam criadas aplicações 
e servidores portáveis internos para atender a qualquer tipo de requisição do ORB.
• Esqueletos: segundo Coulouris et al. (2007), esqueletos são classes geradas na linguagem 
do servidor por um compilador de IDL, que tem por função desempacotar os argumentos 
nas mensagens de requisições (vindas dos clientes) e empacotar exceções e resultados 
nas mensagens de respostas geradas por um servente. Nesse desempacotar e empacotar, 
consegue estipular qual o tipo da requisição e enviá-la a um servente correto, ou estabelecer 
a qual cliente a resposta deverá ser enviada pelo ORB.
• Servente: implementa as operações que o servidor possui através de chamada de 
métodos, permitindo ao servidor entender a requisição do cliente e responder aquilo que 
lhe foi pedido.
DCOM
Entendendo as tecnologias ligadas aos sistemas distribuídos e os benefícios que ela pode 
trazer, a Microsoft percebe que deve investir recursos voltados a esse tema e, em 1996, lança 
no mercado seu modelo de ambiente de programação distribuído chamada DCOM (Distributed 
Component Object Model).
Muito semelhante ao modo de trabalho do CORBA, o DCOM também permite que objetos 
se tornem acessíveis, possibilitando acesso a serviços localizados em servidores, caracterizando, 
assim, uma comunicação cliente/servidor.
Como principal ponto, a Microsoft fornece soluções transparentes dentro do DCOM. Vejamos 
abaixo alguns exemplos:
• Transparência de localização: através de ponteiros, os clientes conseguem localizar objetos 
que estão inseridos em servidores e, assim, eles podem utilizar os servidos disponíveis 
apenas invocando o método da interface como se essa invocação fosse local.
• Transparência de plataforma: sabemos que sistemas distribuídos operam em 
multiplataformas devido à gama de sistemas operacionais e hardwares que assumem 
papéis de cliente e servidores. Possibilitar que todos se comuniquem e troquem requisições 
e respostas é uma característica dos ambientes de programação distribuída, o DCOM 
implementa essa funcionalidade.
• Transparência de linguagem de programação: assim como plataformas podem ser 
diferentes, as linguagens de programação que estão presentes em clientes podem ser 
diferentes em servidores. Se clientes tivessem a obrigatoriedade de possuir a mesma 
codificação de servidores, os serviços fornecidos seriam muito restritos e, em muitos casos, 
a solução seria inviável.
12
Unidade: Ambiente de programação distribuída
SOAP
Como você já deve ter percebido até agora, o segredo dos sistemas cliente/ servidor e 
os sistemas distribuídos em geral está em seus bastidores, nas programações, protocolos e 
arquiteturas que são criadas para aperfeiçoar o modo de comunicação entre hardware e 
software distribuído.
Muitos desenvolvedores criam soluções fantásticas para clientes finais, ou seja, criam sites, 
sistemas, serviços e soluções que agradam ao usuário final e o fazem interagir com suas 
criações. Você se lembra de quando acessou sua primeira rede social? Ou quando usou algum 
serviço como compra, ou se comunicou com alguém pela internet e pensou “Uau, isso é 
realmente muito legal”?
Vamos ver agora um protocolo chamado SOAP que permite justamente a comunicação ao 
usar um sistema distribuído que você tanto gosta, mas talvez não saiba bem como ele funciona 
em sua parte mais técnica.
CONHEÇA O SIMPLE OBJECT ACESS PROTOCOL
O SOAP tem seu foco no envio de qualquer informação através de um sistema distribuído. 
Ele surgiu em meados de 1999 e inicialmente foi projetado apenas para o protocolo HTTP. 
Atualmente, define esquemas para outros protocolos de transporte e especialmente define 
meios de uso para o uso da linguagem XML.
Segundo Coulouris et al. (2007), para suportar comunicações entre cliente e servidores, o 
SOAP define como o método de envio da mensagem de requisição e da mensagem de resposta 
como deve se comportar.
Lembre-se de que o cliente e o servidor podem estar a quilômetros de distância um do outro. 
Uma requisição que parte do clienteem direção ao servidor passa por diversos middlewares 
pelo caminho e isso requer certa segurança. Afinal, não queremos que qualquer um possa ler 
nossas informações.
Uma mensagem SOAP é transportada em um envelope que, por usa vez, possui cabeçalho 
e um corpo em sua composição. Vejamos a função de cada elemento:
Cabeçalho: permite que intermediário entre cliente e servidor possam tomar ações sobre 
o que fazer com o envelope, analisando seu conteúdo e para onde o envelope deverá ser 
encaminhado. Assim como um carteiro lê o destinatário de uma carta e sabe onde deve entregá-
la, o cabeçalho de um envelope no protocolo SOAP funciona, a diferença é que os intermediários 
podem acrescentar e editar informações.
Corpo: o corpo contém informações sobre a validade do conteúdo da mensagem e garante 
que não existem erros e que o conteúdo está correto para ser entregue.
13
EXEMPLO
Abaixo, temos um exemplo de requisição de um cliente a um servidor apenas iniciando uma 
simples comunicação:
POST /EnviandoHelloWord/endpoint HTTP/1.1
Host: (aqui irá o endereço do destinatário)
Content-Type: text/XML; charset=”utf-8”
Content-Length: 322
Cabeçalho:
<soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/
 xmlns:xsd=http://www.w3.org/2001/XMLSchema
 xmlns:ns1=http://hello>
Corpo:
 <soapenv:Body>
 <ns1:sayHello>
 <ns1:name>Olá</ns1:name>
 </ns1:sayHello>
 </soapenv:Body> 
 </soapenv:Envelope>
Vejamos agora a resposta do Servidor:
HTTP/1.1 200 OK
Content-Type: text/XML; charset=”utf-8”
Content-Length: 367
Cabeçalho:
<soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/
 xmlns:xsd=http://www.w3.org/2001/XMLSchema
 xmlns:ns1=http://hello>
Corpo:
<soapenv:Body>
 <ns1:sayHelloResponse>
 <ns1:return>Olá, Tudo bem?</ns1:return>
 </ns1:sayHelloResponse>
 </soapenv:Body> 
</soapenv:Envelope>
14
Unidade: Ambiente de programação distribuída
Java RMI
Sabemos que, quando se trata de ambiente de desenvolvimento em Java, um dos conceitos 
fundamentais é a possibilidade de criação de objetos e manipulação dos mesmos de diversas 
formas. Porém, quando se trata de desenvolvimento Java em um ambiente distribuído, onde 
temos objetos em clientes e objetos em servidores?
Nesse caso, utilizamos o conceito de Java RMI (Remote Method Invocation), que possibilita 
invocar qualquer objeto localizado em um cliente ou servidor mesmo que esse cliente ou servidor 
não possua conhecimento do objeto que está invocando. Vamos ver como isso funciona:
Tudo começa entendendo a ligação de Máquinas Virtuais Java ou conhecidas como JVM 
(Java Virtual Machine). Perceba que um cliente pode possuir uma interface Java e deseja acessar 
algum serviço localizado em outra JVM que esteja, em um servidor, por exemplo. Através do 
RMI, a Máquina Virtual pode invocar um método que está armazenado em um cliente apenas 
esperando ser acessado via rede.
Os métodos que são invocados pelo cliente podem inclusive passar objetos localizados 
em servidores que nunca foram vistos pelo cliente antes, tirando assim a preocupação do 
desenvolvedor de implementar objetos em clientes. Podemos entender isso como carregamento 
dinâmico de classes e objetos.
Considere um desenvolvedor expandindo as funcionalidades de sua solução Java. Nesse 
cenário, imagine aplicadas a criação e a modificação de classes a todo o instante, adicione 
também um cliente que queira acessar essas funcionalidades, mas não tenha cópia dessas 
novas classes (sejam públicas ou privadas) no mesmo instante em que elas são atualizadas pelo 
desenvolvedor inicial. 
A solução nesse cenário é a utilização do cliente RMI que busca automaticamente as novas 
classes do servidor onde é compartilhada a classe e, consequentemente, a solução que ela traz. 
A nova classe é carregada na memória e o cliente RMI pode utilizá-la tranquilamente.
Vejamos um exemplo de código para a criação simples de um servidor em Java RMI. Note 
como é simples a criação do novo objeto e como podemos compilar o mesmo:
import java.rmi.Naming;
public class ServerTeste //considere a criação da classe ServerTeste anteriormente
 {
 public static void main(String[] args)
 {
 if (args.length != 1)
 {
 System.err.println(“\nUsage:\t java ServerTeste objname\n”);
 System.exit(1);
 }
15
 try
 {
 Teste ateste = new Teste();// criação do objeto servidor
 String objname = “//localhost/”+args[0];
 System.out.println(“Registrando” +objname+ “...”);
 Naming.rebind(objname, awalk);// Registro do RMI
 System.out.println(“Registrado”);
 }
 catch (Exception e) // catch caso ocorra erro no registro do RMI
 {
 System.err.println(“Erro em main()” + e);
 e.printStackTrace();
 System.exit(2);
 } 
System.out.println(“Esperando Objeto”);
}}
Para compilar o servidor acima utilizamos a expressão: 
servhost> javac ServerTeste.java
Web Service
Como último tópico, temos o conceito de Web Service que podemos entender como a solução 
final implementada, podendo utilizar vários ambientes de programação distribuída trabalhando 
em conjunto.
Ao entender o conceito de SOAP, Java RMI e diversos ambientes de programação distribuída, 
temos um olhar focado naquela solução que desejamos desenvolver. Porém, na integralização 
de sistemas, um olhar mais amplo, ou seja, ou olhar macro sobre a solução é necessária e é 
através deste olhar que podemos ver Web Service sendo criados.
Um WebService é um fragmento de lógica de negócio, localizado em algum lugar na Internet, 
que é acessível através de protocolos de Internet baseados em padrões, como HTTP ou SMTP. 
Usar um Web Service pode ser tão simples quanto efetuar um login em um site ou tão complexo 
quanto facilitar uma negociação multiorganizacional. (CHAPPELL, D. JEWELL, T., p. 01, 
tradução nossa).
16
Unidade: Ambiente de programação distribuída
Em tradução livre, David considera um Web Service como um pedaço da lógica de um 
negócio, que está localizada em algum lugar da internet e pode ser acessada por protocolos 
como HTTP ou SMTP. David também traça um paralelo, dizendo que Web Service pode ser 
visto desde um simples login em algum site, até a complexa negociação de multinacionais 
através de algumas tecnologias.
As principais tecnologias inseridas em Web Service são:
• SOAP: como víamos anteriormente, o SOAP se importa com a estrutura de 
empacotamento para transportar informações em XML através de protocolos de Internet 
(HTTP, SMTP, FTP).
• WSDL: tecnologia que padroniza a descrição da interface de um web service. Ele define 
como serão os parâmetros de entrada e saída de uma chamada externa.
• UDDI: repositório mundial de Web Services, permite consultar diversas soluções já 
criadas, mais informações em: http://uddi.xml.org/
17
Material Complementar
Como complemento desta unidade, sugiro a leitura completa do capítulo I do livro: 
• KALIN, M. Java Web Services: Implementando. Alta Books, 2009.
18
Unidade: Ambiente de programação distribuída
Referências
CHAPPELL, D.; JEWELL, T. Java Web Services. O’reilly, 2002.
COULORIS, G.; DOLLIMORE, J. AND KINDBERG, T. Sistemas Distribuídos: Conceitos e 
Projeto 4/E. Bookman, 2007.
HANSEN, M. D. Soa Using Java Web Services. New Jersey: Prentice Hall, 2007.
KOCHMER, C. Jsp And Xml: Integrating Xml And Web Services In Your Jsp Application. 
Boston: Addison-Wesley, 2002.
TANENBAUM, A.S.; VAN STEEN, M. Sistemas Distribuídos: Princípios e Paradigmas 
2/E. Prentice Hall, 2007.
19
Anotações
www.cruzeirodosulvirtual.com.br
Campus Liberdade
Rua Galvão Bueno, 868
CEP 01506-000
São Paulo SP Brasil 
Tel: (55 11) 3385-3000
www.cruzeirodosulvirtual.com.br
Rua Galvão Bueno, 868
Tel: (55 11) 3385-3000
Sistema Servidor 
Cliente
Tecnologias Cliente / Servidor na Internet
Material Teórico
Responsável pelo Conteúdo:
Prof. Esp. Marcio Funes
Revisão Técnica:
Prof. Ms. Luiz Carlos Reis
Revisão Textual:
Profa. Ms. Claudio Brites
5
• Introdução
• ASP
• PHP
Acada dia, novos conceitos, novas ferramentas e novas linguagens surgem no mercado 
voltado a soluções web. Isso se dá porque diversas empresas querem, ao oferecerem serviços, 
beneficiarem-se da praticidade e velocidade com que seus clientes podem acessar tais serviços 
on-line. Devido a essa grande demanda, cada vez mais profissionais são requisitados com 
propostas de salários atrativas e diversos benefícios.
Peço, inicialmente, que você leia o material disponibilizado para, depois, realizar os exercícios 
propostos. Essa prática vai auxiliá-lo a conhecer o conteúdo antes de partir para a aplicação 
da aprendizagem. Temos vários tipos de atividades nesta unidade, que deverão ser realizadas 
como parte obrigatória do conteúdo, para o domínio do conhecimento adquirido.
É importante também que você assista à apresentação em PowerPoint narrado desta unidade, 
pois ela sintetiza o conteúdo e será de grande auxílio para consolidação do que for visto no 
material teórico.
É fundamental a sua participação no debate com seus colegas sobre os temas propostos; 
afinal, os que trazem experiências poderão compartilhá-las com os que não a possuem ou 
que estão em início de carreira.
 · Nesta unidade, estudaremos as tecnologias envolvidas no 
desenvolvimento de soluções cliente/servidor na internet 
– conhecer quais delas estão disponíveis no mercado é 
fundamental para qualquer profissional que deseja seguir 
carreira na área de Web.
Tecnologias Cliente / Servidor na Internet
• .NET
6
Unidade: Tecnologias Cliente / Servidor na Internet
Contextualização
Em 1995, Rasmus Lerdorf, um desenvolvedor canadiano-dinamarquês, queria implementar 
funcionalidades de consulta de estatísticas baseadas em números de acesso a currículo on-line. 
Para isso, criou uma série de scripts no formato CGI na linguagem C, batizando-os de Personal 
Home Page Tools. Era o início da linguagem que conhecemos hoje como PHP, que está presente 
em diversas e diversas páginas da Internet, permitindo funcionalidades inúmeras a todas elas.
Assim como o PHP, outras soluções que tragam novas possibilidades a sistemas cliente/
servidor na internet são muito procuradas por empresas que querem seus produtos e serviços 
acessíveis de um modo fácil, rápido e confiável na web, criando um nicho de mercado enorme 
para empresas de tecnologia e desenvolvedores.
Seguindo essa tendência de busca por novas soluções, em 1989, um holandês chamado 
Guido van Rossum decidiu criar uma linguagem diferente de tudo o que já se tinha visto. Ele 
queria uma linguagem que fosse aberta e comunitária, e que trouxesse ao desenvolvedor 
novas possibilidades. Em 1991, Guido lançou essa linguagem, chamada Python, que tem 
ganhado cada vez mais adeptos – principalmente quando temos uma solução Python 
aliada ao framework Django, muito procurada por desenvolvedores web que desejam criar 
soluções cliente/servidor em web.
Independentemente da linguagem ou solução escolhida, o papel de novas tecnologias 
aplicadas a esses contextos é muito importante e cresce cada vez mais, ampliando a demanda de 
novos profissionais. Portanto, seja bem-vindo, ou bem-vinda, a esse novo cenário de soluções, 
escolha uma tecnologia que mais se encaixa em seu perfil e siga em frente, pois a nossa área 
necessita de seus talentos.
7
Introdução
Ao fazermos uma rápida busca pela internet a procura de tecnologias e linguagens que 
podemos utilizar no contexto de Web, perceberemos a quantidade e diversidade de soluções que 
o mercado oferece aos profissionais de tecnologia. Dentre essas soluções, algumas se destacam 
e é muito importante que você as conheça e saiba suas aplicabilidades e exemplos. 
Nesse capitulo, você encontrará algumas dessas tecnologias, que podemos utilizar na 
internet para criar possibilidades em sistemas cliente/servidor. Como cada tecnologia e 
linguagem possuem muitas informações, modos de utilização, declaração de variáveis e 
detalhes particulares, abaixo você encontra o essencial de cada uma dessas tecnologias para 
auxiliar na busca e formação de seu conhecimento.
ASP
 Em 1996, durante a Site Builders Conference and the Professional Developers Conference, a 
Microsoft apresentou ao mundo sua nova solução para ambientes de programação focados em 
servidores web: o ASP – abreviação de Active Server Pages ou, em tradução livre, Páginas de 
Servidor Ativas. Ele possui a função de criar páginas dinâmicas, interativas e possibilitar novos 
recursos aos clientes que já utilizavam soluções Microsoft aplicadas à Internet (LOTAR, 2010).
 O ASP foi criado exclusivamente para servidores Microsoft que utilizavam o IIS (Internet 
Information Service) para hospedar páginas e prover acesso a elas – por isso era exclusivo para 
desenvolvedores e empresas que já utilizavam soluções Microsoft. O IIS permitia hospedar 
páginas em HTML e, como complemento, permitia incluir scripts ASP nas funcionalidades 
das páginas hospedadas.
Primeiros passos em ASP
Ao abrir uma página com extensão .asp, podemos observar que ela irá possuir códigos em 
HTML e scripts contendo instruções em ASP, que permitem o dinamismo das páginas e a interação 
com os usuários. Outro fato importante é que os scripts ASP não são executados diretamente na 
máquina do cliente, cabe ao servidor que hospeda a página processar as instruções e entregar 
a seu cliente a funcionalidade, esse fator permite que diversos navegadores possam acessar 
páginas ASP sem problemas.
Vejamos agora um exemplo simples de aplicação de um script ASP em uma página HTML, 
trazendo assim algum dinamismo a essa página. Um fator muito importante é que os scripts 
ASP não podem ser visualizados pelo cliente, pois ficam apenas implementados no servidor, 
deixando o cliente apenas visualizar o código HTML puro.
8
Unidade: Tecnologias Cliente / Servidor na Internet
Abaixo, temos um código simples em HTML:
<HTML>
 <HEAD>
 <TITLE> Minha página em ASP </TITLE>
 </HEAD>
 <BODY>
 A hora atual é 19:24:31 e estamos no dia 14
 </BODY>
</HTML>
Perceba que a página deseja mostrar ao cliente a hora atual e o dia, porém, essa função não 
é possível apenas com o código HTML. Vamos implementar um script ASP para isso:
<HTML>
 <HEAD>
 <TITLE> Minha página em ASP </TITLE>
 </HEAD>
 <BODY>
 A hora atual é <%=time%> e estamos no dia <%=day(now)%>
 </BODY>
</HTML>
Vejamos um exemplo mais elaborado, no qual temos uma página simples em HTML solicitando 
informações a um cliente e, logo após, uma página ASP que exibe os valores recebidos.
Considere o formulário HTML abaixo, solicitando o Nome e o Telefone do cliente:
Figura 1 – Exemplo de Formulário
9
 Vejamos abaixo o código HTML utilizado para criar o formulário acima:
• Meusdados.html
<HTML> 
 <HEAD> 
 <TITLE>Meus Dados</TITLE> 
 </HEAD> 
 <BODY>
 <FORM name=”Form” action=”request.asp” method=”get”> 
 Nome
 <INPUT type=”text” name=”NomeCompleto” size=”30”><p>
 Telefone:
 <INPUT type=”text” name=”Telefone” size=”15”><p>
 <INPUT type=”submit” value=”Enviar formulário”> 
 </FORM> 
</HTML>
Veja no código que a tag <Form> possui o action=”request.asp”, enviando os dados pelo 
método get (method=”get”) para a página request.asp.
Vejamos agora como deverá ser o código da página resquest.asp e como utilizar as informações 
da página Meusdados.html
<HTML>
 <HEAD><TITLE>Minha página ASP</TITLE>
 <%
 NomeCompleto = request.querystring(“NomeCompleto”)
 Telefone = request.querystring(“Telefone”)
 %>
 </HEAD>
 <BODY>
 Seus Dados:
 Nome: <% response.write(NomeCompleto)%><BR>
 Telefone: <% response.write(Telefone)%></P>
 </BODY>
</HTML>
Veja que conseguimos a informação digitada no formulário da página Meusdados.html 
através do resquest.querytring. Perceba também que utilizamos o mesmo nome dado no tag 
<INPUT> NomeCompleto. Conseguimos, assim, exibir para o cliente a informação através do 
<% response.write(NomeCompleto)%>.10
Unidade: Tecnologias Cliente / Servidor na Internet
ASP.NET
Como toda tecnologia sempre está em constante mudança e melhoramento, não seria diferente 
com o ASP. O ASP.NET é considerado a próxima geração do ASP, e é muito utilizado em sites 
comercias. Como principal vantagem, permite orientação a objetos e pode ser implementado 
no Visual Studio .NET.
Acesse: http://www.asp.net/get-started
Esse é o site oficial da Microsoft, que permite fazer download do Visual Studio e 
começar a desenvolver soluções ASP.NET – acesso obrigatório para programadores!
PHP
Responsável por grande parte da evolução tecnológica voltada a desenvolvimento web, o 
PHP é uma linguagem para páginas dinâmicas e possibilita muitas funções em uma ambiente 
Cliente/Servidor. Uma grande vantagem do PHP é seu código ser livre e gratuito, possibilitando a 
qualquer um utilizar sua estrutura sem preocupações de diretos. Além de gratuito, o PHP possui 
alto nível de segurança e é totalmente compatível com o Linux, principalmente em soluções web 
do tipo LAMP: Linux + Apache + MySQL + PHP.
Estrutura da Linguagem
O PHP pode ser utilizado em e-commerce, paginas pessoais, sistemas de intranet e em 
gerenciamento de banco de dados. Assim como outras soluções, a estrutura da linguagem se inicia 
com a requisição de página do cliente, o servidor por sua vez procura a página solicitada e interpreta 
o código PHP contido nela, retornando o resultado da função ali contida (MILANI, 2010).
Vejamos um exemplo de uma página PHP:
<HTML> 
 <HEAD> 
 <TITLE>Insira seus Dados</TITLE> 
 </HEAD> 
 <BODY> 
 <?
 echo “Esse script é PHP”;
 ?>
 </BODY> 
<?HTML>
11
Perceba que assim como em outras linguagens, também utilizamos o HTML como linguagem 
base, codificando o PHP entre suas tags. Para diferenciar o PHP, utilizamos o <?.
Vejamos outro exemplo:
<HTML><BODY>
 <?
 $texto1 = “PHP”;
 $texto2 = “Esse é um exemplo simples de $texto1”; 
 $echo $texto2;
 ?>
</BODY></HTML>
O código acima exibiria no navegador a seguinte frase: 
Esse é um exemplo simples de PHP. 
Perceba que foi criado uma variável chamada $texto1, que armazenou o valor “PHP”, e 
outra chamada $texto2, que armazenou a frase. Podemos exibir no navegador a frase completa 
através do $echo.
Vejamos outro exemplo, agora utilizando alguma funcionalidade:
<HTML>
 <BODY>
 <?
 function soma($valor1, $valor2){
 return ($valor1+$valor2)/2;;
 }
 $media = soma(10, 20);
 echo “A media é $media”;
 ?>
 </BODY>
</HTML>
O código acima possui a função de calcular uma simples média, veja que foi criada uma 
função chamada soma através do function, e reservada duas variáveis: $valor1 e $valor2. Essa 
função retorna essas duas variáveis, sendo divididas por 2, caracterizando uma média. Logo 
após, temos outra variável chamada $media, recebendo o retorno da função media com os 
valores das variáveis definidos como 10 e 20. Para finalizar, exibimos no navegador através do 
echo o resultado da média.
12
Unidade: Tecnologias Cliente / Servidor na Internet
A linguagem permite utilizar funções como de IF:
<?
$num1 = 10;
IF ($num == 10){
echo “Essa linha será exibida”;
}
?>
E também funções de repetição do o Do WHILE:
?>
$var = 10;
do{
echo “Repetindo”;
}while ($var < 10);
?>
Acima, pudemos ver alguns exemplos de como é estruturada a linguagem PHP, esperamos 
que tenha se sentido incentivado a buscar conhecimento sobre essa linguagem. O PHP não 
se resume a essas funções, portanto, se você estava a procura de uma linguagem web que 
possibilita criar soluções Cliente/Servidor, acima estão os primeiros passos.
Para que você se aprofunde no PHP, sugerimos visitar os sites abaixo:
 » Site oficial do PHP para downloads: http://www.php.net/
 » Manual que descreve as funções do PHP: http://www.php.net/manual/pt_BR/
 » No site do W3schools temos diversos tutoriais: http://www.w3schools.com/PHP/
 » Grupo dos Desenvolvedores de PHP do Estado de São Paulo: http://phpsp.org.br/
.NET
Ainda na temática Microsoft, temos a plataforma .NET, lançada na virada do milênio e que 
possui dois objetivos principais: o primeiro é facilitar o trabalho do desenvolvedor, tornando a 
construção do projeto prática e atendendo a qualquer necessidade do cliente; a segunda é o de 
se estabelecer como uma solução viável no ambiente de Web Services, tendo como principal 
concorrente as soluções Java.
.NET (lê-se dotNet) é uma tecnologia focada em atender os padrões que estão incorporados 
na internet porém sem deixar de lado as características que são estabelecidas pela Microsoft, 
o desenvolvedor pode então se beneficiar com a facilidades de desenvolvimento presentes 
no produtos Microsoft sem se fechar aos padrões da internet e assim comunicar com outras 
tecnologias. (LOTAR 2010)
13
.NET Framework
Para que você possa construir seus projetos em .NET, a Microsoft oferece o .NET Framework 
como um ambiente de programação para aplicações Web e Web Service de modo simplificado. 
Ele suporta linguagens como C++, C#, Visual Basic, ASP.NET, dentre outras.
Como pacote de programas principal voltado a .NET Framework, a Microsoft disponibiliza 
o Microsoft Visual Studio, que é atualizado constantemente, fornecendo meios para se 
desenvolver nas linguagens suportadas pela .NET Framework. A seguir, alguns exemplos de 
codificação nesse ambiente.
Vejamos abaixo um exemplo da linguagem C#:
using System;
class HelloWorld
{
 static void Main()
 {
 Console.WriteLine(“Hello World”);
 }
}
Veja que o programa começa com o using System, no qual indicamos que o programa 
abaixo pede as classes e funções presentes no System. Logo após, temos a classe HelloWorld e, 
como toda classe, com ela podemos criar objetos e com eles atributos e métodos. Porém, nessa 
classe, apenas utilizamos a classe Console, possível de ser utilizada devido a termos usado o 
System no começo do código e utilizar o WriteLine, que está presente dentro da classe Console 
– podemos ver essa relação pelo “.” entre o Console e o WriteLine para, assim, esse código 
mostrar ao usuário a frase Hello World.
Vejamos outro exemplo:
using System;
using System.Collections.Generic;
using System.Text;
Public class Cliente{
 private long id;
 private double renda;
 private DateTime nascimento;
 private string nome; 
Public Cliente(long id, double renda, DateTime nascimento, string nome){
 this.id = id;
 this.renda = renda;
 this.nascimento = nascimento;
 this.nome = nome;
 } 
} 
14
Unidade: Tecnologias Cliente / Servidor na Internet
Para que você conheça mais sobre o .Net, sugiro os sites abaixo:
 » Revista .Net: http://www.devmedia.com.br/revista-easy-dotnet-magazine
 » Conteúdo Extra: http://www.devmedia.com.br/dotnet/
 » Site oficial da Microsoft .Net: http://www.microsoft.com/net
ColdFusion
Ao começar a estudar essa tecnologia, você perceberá que ColdFusion não se resume apenas 
a uma linguagem, mais do que isso, ela fornece soluções web para desenvolvimento de sites, 
portais, intranets e demais aplicações web. Como ela possui funções para auxiliar em sistemas 
Cliente/Servidor, é fundamental conhecê-la.
Seu funcionamento
Inicialmente chamado de Cold Fusion, foi criado em 1995 pelos irmãos Allaire. Logo depois 
foi comprado pela empresa Adobe. Atualmente, para se trabalhar com essa tecnologia, primeiro 
temos que entender que CF (ColdFusion) também é um servidor de aplicações web, ou seja, 
o ColdFusion é um ambiente de desenvolvimento de aplicações web dinâmicas com suporte 
à linguagem CFML – abreviação de ColdFusion Markup Language. Nesse ambiente, podemos 
utilizar banco de dados, recursos de e-mail e aplicações Java, o que torna o CF atraente a 
diversos desenvolvedores (BRADLEY, 2000).
Você pode desenvolver páginas utilizando a linguagem CFML, que é baseada em tags, assim 
como o HTML, porém irá necessitar configurar um servidor CF para interpretar a linguagem. 
Primeiramente,o servidor realiza a leitura das páginas à procura de tags, que são iniciadas por 
CF, além de ler variáveis ou funções que contenham o sinal #.
Cliente Rede
Internet ou
Intranet
Servidor
Cold Fusion
Servidor
Página
Web
Página
CFML
Servidor
Web
Página
Web
Navegador
1
5
4
2
3
Requisição
HTTP
Bco. Dados
E - mail
Diretórios
Arq. Sistema
COM/CORBA
Servidores Web
Figura 2 – Esquema ColdFusion
 
1. Quando o usuário faz alguma ação em um site, o navegador envia uma requisição HTTP 
para o servidor Web;
2. O servidor Web, recebendo a requisição, envia os dados para um servidor ColdFusion 
através de API;
15
3. O servidor de ColdFusion, por sua vez, interpreta os códigos de CFML que estão programadas 
dentro das páginas. Dependendo da programação CFML da página, o servidor então faz 
interações com servidores de e-mail, banco de dados, diretórios e demais serviços;
4. Após processar a programação CFML e acessar os serviços que ali estão implementados, 
o servidor ColdFusion gera dinamicamente uma página HTML que será enviada ao 
servidor Web;
5. Por último, o servidor Web retorna a página HTML para o usuário.
Veja um exemplo de CFML em uma página HTML:
<HTML>
 <HEAD>
 <TITLE>Olá Mundo</TITLE>
 </HEAD>
 <BODY> 
 <CFSET OLA=’Olá Mundo’>
 <CFOUTPUT>
 <FONT SIZE=”10”>#ola#</FONT>
 </CFOUTPUT>
 </BODY>
</HTML>
Veja outro exemplo, utilizando acesso a banco de dados, principalmente em aplicações no 
contexto de Cliente/Servidor.
<CFQUERY DATASOURSE=”AgendaContatos” NAME=”Agenda”>
 SELECT * FROM Contatos
 </CFQUERY>
<HTML>
 <HEAD><TITLE>Teste Banco</TITLE></HEAD>
 <BODY>
 <H1> Testando Agenda </H1>
 <CFOUTPUT QUERY=”Agenda”>
 #home#.#telefone#
 <CFOUTPUT>
 </BODY>
</HTML>
Iremos agora conhecer uma das tecnologias que vem ganhando cada vez mais espaço no 
mercado. Em 1991, um holandês chamado Guido Van Rossum lança ao mundo a linguagem 
Python em busca de novas possibilidades na programação interpretada. De código aberto e 
disponível para vários sistemas operacionais, Python tem a característica de ser interpretada 
pois não necessita ser compilada, ou seja, traduzida para a linguagem de máquina; ela apenas 
precisa ser “lida” por um interpretador (assim como HTML), que irá traduzir as instruções que 
ali estão presentes (BROOKS-BILSON, 2003).
16
Unidade: Tecnologias Cliente / Servidor na Internet
O nome Python foi dado em homenagem ao programa de TV britânico chamado Monty 
Python’s Flying Circus, e não em associação a cobra Python. Além de interpretação, Python 
não necessita que declaremos variáveis como pré-antecedente de programação; a declaração 
de variáveis ocorre de forma dinâmica e bem intuitiva ao programador. Por ser uma linguagem 
de alto nível, possui recursos com strings, listas, dicionários, classes e, como característica 
fundamental, Python é orientado a objetos (LABAKI, 2010).
Vejamos agora alguns exemplos de códigos em Python:
Começando com o simples Hello Word, podemos fazer da seguinte forma:
a = “Hello”
b = “World”
print a, b
Como Saída temos: Hello World
Em Python, não é necessário dizermos que a variável a é do tipo Char. Ao receber um valor, 
a definição do tipo de variável é dinâmica.
Veja outra opção quando se trata de listas, vamos às declarações:
numeros = [1, 2, 3]
opcoes = [“sim”, “não”]
listas = [números, opções]
Em nenhum momento foi necessário preparar a variável para receber vários valores em uma 
lista. Ao exibir essas listas, temos como saída:
print numeros[]
Saída: 1, 2, 3
Se quiser que seja exibido apenas o 3º número, podemos executar a seguinte saída:
print numeros[2]
Saída: 3 // entendendo que a contagem começa a partir do 0;
Ou ainda para exibir as duas listas podemos apenas gerar essa saída:
print listas
Saída: 1, 2, 3, sim, não
Ou ainda, podemos ver uma aplicação mais elaborada, uma rotina muito conhecida por 
estudantes de programação, descobrindo números primos, veja como podemos programar essa 
rotina facilmente no Python:
p = input(“Entre com um número natural: “)
primo = True
for i in range92, n):
17
 if n%i == 0:
 primo = False
if primo:
 print n, “numero primo”
else:
 print n, “não é numero primo”
 
Com os exemplos acima esperamos que tenha percebido que a linguagem Python é 
extremamente simples e intuitiva, e por isso muito indicada para quem está dando seus primeiros 
passos na programação. Veja na seção Material Complementar onde você pode encontrar mais 
conteúdos de Python.
18
Unidade: Tecnologias Cliente / Servidor na Internet
Material Complementar
Como complemento desta unidade, sugiro a leitura completa do capítulo I do livro: 
 » MENEZES, N N C. Introdução a programação com Python. São Paulo: Novatec, 2009.
Sugiro, também, a leitura completa do livro:
 » LOTAR, A. Como Programar com ASP.NET e C#. Novatec, 2010.
19
Referências
BROOKS-BILSON, R. Programming ColdFusion MX: Creating Dynamic Web Applications 
2/E, O’Reilly, 2003 
LABAKI, J. Introdução ao Python – Módula A, Grupo Python, UNESP – Ilha Solteira
HETLAND, M L. Beginning Python: from novice to Professional. Apress, 2005.
LOTAR, A. Como Programar com ASP.NET e C#. Novatec, 2010.
MILANI, André. Construindo Aplicações Web com PHP e MySQl. Novatec, 2010.
BRADLEY, M Z. ColdFusion – Guia rápido para Desenvolvimento na Web. Ciência 
Moderna, 2000.
20
Unidade: Tecnologias Cliente / Servidor na Internet
Anotações
www.cruzeirodosulvirtual.com.br
Campus Liberdade
Rua Galvão Bueno, 868
CEP 01506-000
São Paulo SP Brasil 
Tel: (55 11) 3385-3000
Sistema Servidor 
Cliente
Programação de aplicações cliente/servidor na WEB com JSP
Material Teórico
Responsável pelo Conteúdo:
Prof. Esp. Marcio Funes
Revisão Técnica:
Prof. Ms. Luiz Carlos Reis
Revisão Textual:
Profa. Ms. Claudio Brites
5
• Introdução
• Utilizando Scriptlet em JSP
• Criando Scripts dinâmicos em JSP
Nesta unidade, veremos alguns assuntos introdutórios da nossa disciplina e aproveitaremos 
para apresentar a você alguns conceitos que utilizaremos na estrutura de todas as nossas 
unidades.
Lembramos você da importância de realizar todas as atividades propostas dentro do prazo 
estabelecido para cada unidade, pois, dessa forma, você evitará que o conteúdo se acumule 
e que você tenha problemas ao final do semestre.
Uma última recomendação: caso tenha problemas para acessar algum item da disciplina ou 
dúvidas em relação ao conteúdo, não deixe de entrar em contato com seu professor tutor 
através do campo de mensagens.
 · Nesta unidade, trabalharemos o seguinte tópico de conteúdo: 
Conceitos Iniciais: uma visão geral sobre a arquitetura Java 
sendo aplicada de forma dinâmica na Web. Veremos também 
o papel de Servelet e Servetlet para utilizarmos JavaServer 
Pages em busca de soluções Web.
Programação de aplicações cliente/
servidor na WEB com JSP
• Conclusão
6
Unidade: Programação de aplicações cliente/servidor na WEB com JSP
Contextualização
Seja em qualquer ramo, o mercado sempre está em busca de novidades – novos produtos, 
novos serviços, novos profissionais e novas tecnologias. A novidade sempre pode trazer uma 
oportunidade de negócio antes não vista. 
Pensando nisso, em meados de 1990, os primeiros passos para a tecnologia Java foram dados 
– porém, bem longe da Indonésia que, apesar de possuir a “Ilha de Java” em sua geografia e 
ter forte presença do Budismo (que poderia ajudar os programadores a ficarem mais tranquilos 
quando aquele código não queria compilar), não foi o berço dessa tecnologia.
Tudo aconteceu na Sun Microsystems, 
quando uma equipe tinha por intenção 
desenvolver um aplicativo portátil, que 
teria a capacidade de rodar em qualquer 
microchip – inicialmente usando como 
base a linguagem C/C++. Contudo, os 
desenvolvedores perceberam que algumas 
limitações da linguagem não permitiriam 
que o app se tornasse 100% portátil, como 
o projeto necessitava.
Perceba, nesse exemplo, que, quando o mercado deseja criar umaoportunidade de negócio, 
a limitação de uma tecnologia é solucionada com a inovação daquilo que já existe. Com isso, 
a Sun removeu algumas características e alterou outras, criando uma nova linguagem de 
programação, batizada como Oak (carvalho, em português).
Em 1995, a internet já se tornava popular e a busca de inovações nessa área também ocorria, 
como em muitas outras anteriores. Por conta disso, a linguagem Oak, por ter desde o início de 
sua concepção a possibilidade de rodar em várias plataformas, era perfeita, já que a internet 
também possuía essa característica (rodar em várias plataformas). 
Com o sucesso iminente, a Sun renomeou a linguagem para Java, alterou algumas 
características para se adaptar à realidade do mercado e lançou no mesmo ano sua nova solução.
Ainda na mesma ideia de inovação para trazer novidades para o mercado, viu-se a 
possibilidade de criar uma tecnologia que se relacionava com uma dificuldade na área de web: 
criar páginas dinâmicas e de fácil implementação sem abrir mão das funções essenciais que o 
Java podia oferecer a um site. Nesse contexto, surgi a tecnologia JSP (JavaServer Pages), que 
vem exatamente permitir esse dinamismo, podendo inserir trechos com implementações Java, 
trazendo assim as funções desejadas dentro de uma linguagem já conhecida e muito utilizada 
na internet: o HTML.
Podemos, então, ver que a tecnologia JSP tem por foco trazer inovação para mercado e é 
baseada em Java, que alguns anos antes de sua criação teve o mesmo foco: quebrar barreiras 
para trazer novas soluções tecnológicas antes não disponíveis.
Thinkstock/Getty Images
Figura 1 – Estátua de Buda presente na Ilha de Java na Indonésia.
7
Introdução
A evolução está presente na humanidade, temos evidências históricas de sua origem, o 
próprio conceito de evolução só é possível devido à inteligência adquirida por nós seres 
humanos até hoje para cunhá-lo. Sabemos que essa evolução nos trouxe a necessidade de 
criar ferramentas que aperfeiçoassem nosso trabalho – e otimizar os processos humanos é 
uma das bases da computação.
Ainda dentro da computação, vemos novos conceitos, ferramentas e técnicas que surgem 
para melhorar a interação que temos com o computador. Um dos conceitos criados para permitir 
maior dinamismo ao se criar soluções para a web é a tecnologia chamada JSP, abreviação de 
JavaServer Pages (KOLB 2000).
Como você pode notar, a palavra Java não está por coincidência no nome JavaServer 
Pages. JSP é baseada na tecnologia Java; mais que “apenas” baseada, o JSP tem por objetivo 
simplificar o processo de desenvolvimento para web sem deixar o dinamismo muito procurado 
em sites de internet de fora. As possibilidades que a tecnologia Java pode trazer são incríveis, 
por esse motivo surge a necessidade de inserir os recursos que o Java pode fornecer na estrutura 
de linguagens já conhecidas por programadores web (KOLB 2000).
Figura 1 – Comparando linguagens.
Fonte: vidadeprogramador.com.br
8
Unidade: Programação de aplicações cliente/servidor na WEB com JSP
Utilizando Scriptlet em JSP
Para entendermos melhor como a tecnologia JSP funciona, precisamos sempre ter em mente 
que JSP (JavaServer Page) utiliza a arquitetura Java como base e por isso trabalha utilizando 
seus conceitos. Dentro da arquitetura Java temos os Servlets, entender seu funcionamento nos 
ajuda a compreender melhor a função do JSP e como ambos trabalham juntos.
Servlets
Qualquer usuário da internet atual, depois de visitar algumas páginas, já percebe que a 
maioria delas fornece algum tipo de serviço; diferente do início dos anos 90, onde a maioria das 
páginas era simplesmente estática e não previa suporte à interação com o usuário. Hoje vemos 
a internet como fonte de negócio e, portanto, sinônimo de serviços.
Uma das ideias iniciais para transformar páginas estáticas em dinâmicas era prover o 
dinamismo por meio de um servidor que interpretaria a solicitação do usuário e devolveria a ele 
uma página resposta. Desse conceito surgiu uma tecnologia chamada CGI, na qual era possível 
escrever códigos que não rodariam em um navegador como C/C++, eles teriam o servidor 
como ponte interligando a função que o usuário desejasse com a funcionalidade contida no 
código que estava no servidor (TODD; SZOLKOWSKI 2003).
Em 1997, na tecnologia Java, esse conceito foi chamado se Servlet, que vem da ideia de um 
pequeno servidor que tem por objetivo interpretar e compilar as solicitações do usuário através 
de páginas web, procurar as funções solicitadas em suas classes e códigos Java e gerar uma 
página dinâmica de resposta ao usuário.
Agora que vimos que podemos usar um Servlet para interpretar solicitações, podemos 
entender melhor como o JSP se encaixa nessa arquitetura: como possuímos códigos HTML 
que podem ser interpretados em qualquer navegador e temos os códigos Java que podem ser 
implementados em um Servlet, podemos conectar ambos criando um código que possua os 
benefícios de ambos.
Scriptlet
Para que possamos utilizar o código Java dentro de uma JSP utilizamos essa sintaxe:
<% ... %>
Segundo Todd e Szolkowski, esse tipo de codificação é chamado de Scriptlet. É um nome 
que vem da palavra Script, que em inglês significa roteiro; adicionando o sufixo “let”, temos, em 
tradução livre, “scriptzinho”, ou seja, um pequeno script. 
Assim, deixamos a convencional estrutura HTML, que utiliza a tag < ... />, e acrescentamos 
o % para que nosso Servlet consiga diferenciar o que é código Java e o que é HTML. 
Vejamos um exemplo.
9
Vamos utilizar uma expressão Java muito comum para exibir texto, o out.println. Porém, 
vamos colocá-la em uma JSP:
Index_exemplo.jsp
<html> 
 <head> 
 <ti tle> Pagina JSP</ti tle> 
 </head> 
 <body> 
 <% out.println(“Ola Mundo”); %>
 </body> 
</html>
Perceba que utilizamos o HTML em nossa JSP e embutimos um código exclusivo Java 
dentro da página usando o Scriptlet <% ... %>, assim utilizamos o que cada linguagem tem 
de melhor a oferecer.
Declaração de variáveis
Uma das mais conhecidas funções de qualquer linguagem compilada é a possibilidade de criar 
variáveis. Como em HTML não temos essa possibilidade, podemos utilizar JSP e assim teremos a 
facilidade das tags HTML e as possibilidades da linguagem Java (KURNIAWAN, 2002). 
Vejamos um exemplo:
 Index_exemplo2.jsp
<html> 
 <head> 
 <ti tle> Pagina JSP</ti tle> 
 </head> 
 <body> 
 <% String texto = “Ola Mundo”; %>
<%-- Perceba que na linha acima colocamos “Ola Mundo” dentro da variável “texto” e 
a propósito eu sou um comentário --%>
 <% out.println(variavel); %>
<%-- Agora podemos exibir o conteúdo da variável texto como codifi cado na linha 
acima --%>
 </body> 
</html>
10
Unidade: Programação de aplicações cliente/servidor na WEB com JSP
Estruturas de programação
Assim como no exemplo anterior, podemos utilizar mais conceitos Java e criar estruturas de 
condição. 
Vejamos um exemplo no qual podemos utilizar o IF e o ELSE para exibir o nome do mês 
atual por extenso:
index_condicao.jsp
<html> 
 <head> 
 <ti tle> Pagina JSP</ti tle> 
 </head> 
 <body> 
 <% 
int dia = Integer.parseInt((new SimpleDateFormat(“dd”)).format(new Date())); 
int mes = Integer.parseInt((new SimpleDateFormat(“M”)).format(new Date())); 
int ano = Integer.parseInt((new SimpleDateFormat(“yyyy”)).format(new Date())); 
if(mes==1){ 
out.println(“Hoje é “ + dia + “ de Janeiro de “ + ano); 
}else if(mes==02){ 
out.println(“Hoje é “ + dia + “ de Fevereiro de “ + ano); 
}else if(mes==3){ 
out.println(“Hoje é “ + dia + “ de Março de “ + ano); 
}else if(mes==4){ 
out.println(“Hoje é “ + dia + “ de Abril de “ + ano); 
}else if(mes==5){ 
out.println(“Hoje é “ + dia + “ de Maio de “ + ano); 
}else if(mes==6){ 
out.println(“Hoje é “ + dia + “ de Junho de “ + ano); 
}else if(mes==7){ 
out.println(“Hoje é “ + dia + “ de Julho de “ + ano); 
}else if(mes==8){ 
out.println(“Hoje é “ + dia + “ de Agosto de “ + ano); 
}else if(mes==9){ 
out.println(“Hoje é “ + dia + “ de Setembrode “ + ano); 
}else if(mes==10){ 
11
out.println(“Hoje é “ + dia + “ de Outubro de “ + ano); 
}else if(mes==11){ 
out.println(“Hoje é “ + dia + “ de Novembro de “ + ano); 
}else if(mes==12){ 
out.println(“Hoje é “ + dia + “ de Dezembro de “ + ano); 
} %> 
 </body> 
</html>
Assim como utilizamos estruturas de condição, podemos utilizar qualquer outra estrutura 
presente em Java, basta apenas conhecer qual as características que ela possui, utilizar Scriptlet 
para embutir o código Java dentro da JSP e utilizar os códigos HTML para de forma fácil 
estruturar a sequência do que será exibido ao usuário (KURNIAWAN, 2002).
Para saber mais sobre as características do JSP, acesse:
http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro2.html
Esse tutorial criado pela Oracle mostra passa a passo exemplos de utilizações de 
Servetlet dentro de JSP.
Criando scripts dinâmicos em JSP
Como a palavra de ordem em JSP é o dinamismo, antes de ver os primeiros exemplos de 
codificação, devemos entender o funcionamento geral da tecnologia. 
Vejamos um exemplo:
Quando queremos criar uma página HTML simples, utilizamos tags para mostrar ao navegador 
o que queremos exibir ao usuário. No código abaixo, por exemplo:
<HTML>
 <BODY>
 <b>testando tags</b>
 </BODY>
</HTML>
Apenas mostrando a simples frase “testando tags” em negrito, porém, nosso objetivo é 
entender como inserir um código Java em meio ao HTML e assim criar JSP. Para isso, vamos 
inserir uma diretiva JSP.
12
Unidade: Programação de aplicações cliente/servidor na WEB com JSP
Diretivas de JSP
Segundo David (2010), diretivas são tags que fornecem informações ao servidor que irá 
interpretar o código Java contido no JSP. Elas direcionam o modo que o código será interpretado. 
Podemos utilizar três tipos de diretivas JSP: include, page e taglib.
Veja sua sintaxe:
<%@ nome_da_direti va atributo(s)_da_direti va %>
Veja que para caracterizar uma tag em JSP utilizamos o “<%@ ... %>”; diferente do modo 
de tag HTML, no qual utilizamos apenas “< ... />”.
Utilizando o include
A diretiva include dentro de JSP tem por objetivo inserir o conteúdo de outro arquivo em 
uma JSP. 
Vejamos um exemplo:
<%@ include fi le=”endereço_do_arquivo” %> ou 
<jsp:directi ve.include fi le=”endereço_do_arquivo/>
Vamos pensar em uma aplicação do cotidiano envolvendo a diretiva include: uma empresa 
deseja dar as boas vindas sempre que alguém faz o acesso a sua página, porém, ela possui 
várias páginas diferentes e existe a possibilidade de o conteúdo de boas-vindas ser alterado em 
datas festivas – como natal ou páscoa, por exemplo. Nesse caso uma solução seria criar uma 
página de boas-vindas separada do código original de cada página. Assim, as páginas que irão 
exibir as boas-vindas teriam como inclusão o arquivo de boas-vindas que, quando alterado, 
exibiria a alteração onde foi incluído.
index.jsp
boas_vindas.html
clientes.jsp
produtos.jsp
produtos.jsp
Figura 2 – Estruturas de páginas para include.
Fonte: Adaptado de iStock/Getty Images
Dessa forma, sempre teremos a possibilidade de mudar a página boas_vindas.html sempre 
que necessitamos sem nem precisar abrir o código de cada página, como podemos ver na figura 
2. Vejamos agora como seria o código para essa solução:
13
boas_vindas.html
<HTML>
 <BODY>
 <td align=”right” bgcolor=”#FFFF99”>
 <b>Seja bem vindo a nossa página</b>
 </td>
 </BODY>
</HTML>
Agora veja como podemos inserir o conteúdo do arquivo boas_vindas.html em nossa página 
index.html, como mostra a figura 2:
index.jsp
<HTML>
 <BODY>
 <%@ include fi le=”boas_vindas.html” %>
 Texto da página...
 </BODY>
</HTML>
Veja no exemplo que, ao utilizarmos a diretiva include, pudemos inserir todo o conteúdo que 
se encontrava dentro do arquivo boas_vindas.html em apenas uma linha de código por meio 
de uma tag, sendo assim, é como se o código de boas vindas estivesse presente no index.jsp. 
Com essa ação, podemos economizar linhas de código tornando a programação mais enxuta, 
criando um dinamismo entre as páginas de modo que, ao atualizarmos o arquivo boas_vindas.
html, todas as páginas automaticamente estarão atualizadas com a alteração.
Diretiva Page
Essa diretiva possui diversos atributos que dão informações variadas sobre a página em que 
está inserida (DAVID, 2010). Vejamos sua sintaxe:
 <%@ Page atributo1=”valor” atributo2=”valor2” atributo3=”valor3” ... %> 
Ou podemos também utilizar essa sintaxe: 
 <jsp:directi ve.page atributo1=”valor1” atributo2=”valor2” ... />
Vejamos alguns exemplos:
14
Unidade: Programação de aplicações cliente/servidor na WEB com JSP
Atributo Info
Por meio dele podemos inserir informações sumarizadas da página: 
</%@ Page info=”Programação cliente/servidor na Web com JSP” %>
Atributo isErrorPage
Usado para informar ao servidor que interpretará o código Java qual será a página para onde 
ele deve encaminhar o usuário – caso a página que esteja acessando possua algum erro –; ou 
seja, a página que conter essa diretiva se torna a página padrão de erro e sempre será exibida 
caso aconteça algum erro em outra página – esse atributo é do tipo booleano:
<%@ Page isErrorPage=”true”%>
Atributo Language
Atributo usado quando queremos especificar qual será a linguagem de criação de script. Em 
geral, utilizamos esse atributo para definir Java como linguagem geradora de scripts:
<@% Page language=”Java” %>
Atributo isThreadSafe
Uma página JSP em geral responde a muitas solicitações; porém, em alguns casos, queremos 
controlar quais páginas deverão responder a essas solicitações, pois foram programadas para 
isso, e quais não devem. Para isso, usamos esse atributo booleano, com o qual podemos criar 
essa definição (TODD; SZOLKOWSKI, 2003).
<%@ Page isThreadSafe=”false” %> ou <%@ Page isThreadSafe=”true” %>
A diretiva Page possui muitos atributos e permite, por meio das funcionalidades que cada 
atributo possui, criar páginas de modos diferentes e, mais importante, gerenciar esses atributos 
moldando e alterando a solução sempre que for necessário de modo fácil e dinâmico (TODD; 
SZOLKOWSKI, 2003).
Diretiva Taglib
Como podemos perceber através do “lib” de seu nome, a Taglib fornece um libraby de tags 
customizadas, que podemos utilizar em nossa JSP, ou seja, podemos criar nossas próprias tags 
em JSP – desenvolvimento, assim, nossa biblioteca de tags, que poderemos utilizar sempre que 
desejarmos e quando for necessário (TODD; SZOLKOWSKI, 2003). 
Veja sua sintaxe:
15
<%@ taglib uri=”endereço_da_bibliotecadetags” prefi x=”Prefi xodaTag” %> 
ou
<jsp:directi ve.taglib uri=” endereço_da_bibliotecadetags” prefi x=” Prefi xodaTag” />
Vejamos um exemplo da construção de uma solução JSP utilizando a diretiva Taglib para 
personalizar o formato de exibição da data atual no formato longo, e não abreviado como é de 
costume em páginas HTML.
1º Passo: Criar uma classe Java que faça a exibição de data no formato 
longo:
package minhastaglibs;
import java.io.IOExcepti on;
import java.text.SimpleDateFormat;
import java.uti l.Calendar;
import javax.servlet.jsp.JspExcepti on;
import javax.servlet.jsp.tagext.TagSupport;
@SuppressWarnings(“serial”)
public class NovaData extends TagSupport {
 public int doStartTag() throws JspExcepti on {
 try {
 String formatoLong = “EEEEEE’,’ dd ‘de’ MMMM ‘de’ yyyy”;
 SimpleDateFormat formatt er = new SimpleDateFormat(formatoLong);
 String dataAtual = formatt er.format(Calendar.getInstance().getTime());
 pageContext.getOut().print(horaAtual);
 } catch (IOExcepti on e) {
 throw new JspExcepti on(e.getMessage());
 }
 return SKIP_BODY;
 }
}
16
Unidade: Programação de aplicações cliente/servidor na WEB com JSP
2º Passo: Criação do arquivo .TLD, que contém as descrição das tags 
que criamos:
<?xml version=”1.0” encoding=”iso-8859-1” ?> 
<!DOCTYPE taglib PUBLIC “-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN” 
“ htt p://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd”>

Outros materiais