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”><taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>Minhastaglibs</shortname>
<info>Minhas Tags</info>
<tag>
<name>dataAtual</name>
<tagclass>minhastaglibs.NovaData</tagclass>
<bodycontent>JSP</bodycontent>
<info>Uti lizada para informar a data atual em formato longo</info>
</tag>
</taglib>
3º Passo: No arquivo web.xml, presente na sua aplicação web, adicione
a taglib para sua configuração:
<taglib>
<taglib-uri>/tags/minhastaglibs</taglib-uri>
<taglib-locati on>/WEB-INF/tags/minhastaglibs.tld</taglib-locati on>
</taglib>
4º Passo: Criarmos nossa página .jsp para testar nossa Tablib:
<%@ taglib uri=”/tags/minhastaglibs” prefi x=”novoformato”%>
<!-- perceba que na sintaxe acima indicamos a URL onde se encontra nossas Tags: “/tags/
minhastaglibs” e indicamos um prefi xo que será usado para chamar a Tag -->
<! -- agora iremos criar o código HTML e inserir a data modifi cada -->
<HTML>
<HEAD>
<meta HTTP-equiv=”Content-Type” content=”text/HTML; charset=ISSO-8859-1”>
17
<TITLE>Minha Primeira Página JSP</TITLE>
</HEAD>
<BODY>
A data atual: <novoformato:dataAtual></novoformato:dataAtual>
<!-- veja que uti lizamos <prefi x:nome_da_tag> -->
</BODY>
</HTML>
Todo esse trabalho para criar apenas a conversão de tempo para um formato diferente é um
dos exemplos que podemos fazer, a vantagem de criar tags é a de que, na próxima vez em que
precisar utilizar essa nova formatação de data, você não precisará criar novamente a tag – ela
está guardada em sua biblioteca, basta apenas utilizar o código:
<%@ taglib uri=”/tags/minhastaglibs” prefi x=”novoformato”%>
Para indicar que você deseja utilizar um Taglib e também o caminho no qual se encontra a
Tag e um prefix para ser utilizado no código, depois utilize:
<prefi x:nome_da_tage>
Para dizer qual das tags que ali estão em sua biblioteca você deseja utilizar, dessa forma, você
terá o trabalho de criá-la apenas uma vez, depois apenas a utilize quando achar necessário.
Perceba que sem essas diretivas, que são a base do JSP, não poderíamos utilizar as funções que o
código Java possui – seja usando o include para inserir o conteúdo de outros arquivos em uma JSP,
ou utilizando o page para prover informações importantes ao servidor que estará interpretando o
código Java contido no JSP ou, ainda, criando nossas próprias funcionalidades por meio da Taglib.
Ainda existe muito a ser visto em JSP, mas com esses três exemplos de possibilidades já podemos
observar o potencial para a criação de códigos mais dinâmicos, mesmo em páginas HTML simples.
Conclusão
Podemos concluir que o uso de JSP vem trazer o melhor de duas linguagens em uma só
tecnologia. Se de um lado temos o HTML, que é a linguagem web mais conhecida – por ser
uma das primeiras e por ter uma sintaxe simples com possibilidades de rodar em qualquer
navegador, embora não tenha funções mais elaboradas –, do outro lado temos o Java, que
possui diversas possibilidades e funcionalidades em sua arquitetura, permitindo a criação do
dinamismo que as páginas atuais tanto buscam (HANSEN, 2007).
Ao entendermos o funcionamento de JSP, podemos expandir as possibilidades de criar, ao
mesmo tempo, projetos simples por meio do HTML e com uma infraestrutura complexa com
Servelets e código de Servetlets, embutindo código Java e tornando JavaServer Pages uma
solução extremamente atrativa.
18
Unidade: Programação de aplicações cliente/servidor na WEB com JSP
Material Complementar
Como complemento desta unidade, sugerimos a leitura completa do capítulo I do livro:
• TODD, N.; SZOLKOWSKI, M. Javaserver Pages: O Guia do Desenvolvedor. Rio de
Janeiro: Elsevier, 2003.
Sugerimos, também, a leitura completa do livro:
• KURNIAWAN, B. Java Para a Web Com Servlets, Jsp e Ejb. Rio de Janeiro: Ciencia
Moderna, 2002.
Boa leitura!
19
Referências
TODD, N.; SZOLKOWSKI, M. Javaserver Pages: O Guia do Desenvolvedor. Rio de Janeiro:
Elsevier, 2003.
KOLB, M A. Desenvolvendo na Web com Java Server Pages. São Paulo: Editora Ciência
Moderna, 2000.
KURNIAWAN, B. Java Para a Web Com Servlets, Jsp e Ejb. Rio de Janeiro: Ciencia
Moderna, 2002.
HANSEN, M. D. Soa Using Java Web Services. New Jersey: Prentice Hall, 2007.
DAVID M, G. JavaServer Pages Avançados. São Paulo: Editora Ciência Moderna, 2010.
20
Unidade: Programação de aplicações cliente/servidor na WEB com JSP
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
Programação de aplicações cliente/servidor na Web com JSP 2
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
• Banco de Dados em JSP
• JavaBeans em JSP
• JavaScript em JSP
• XML em JSP
• Ajax em JSP
Atenção para a importância de realizar todas as atividades propostas dentro do prazo
estabelecido para cada unidade, pois, assim, 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 com relação ao conteúdo, não deixe de entrar em contato com seu professor tutor
através do botão mensagens
Nesta quinta unidade, você irá estudar como podemos interagir a
acessibilidade e o dinamismo que a tecnologia JavaServer Pages
possui com as vantagens que outras tecnologias ligadas a Sistemas
Cliente / Servidor podem fornecer. Dessa forma, podemos criar
uma solução de Sistemas Distribuídos completa e atender a
qualquer demanda que o mercado crescente pode exigir.
Programação de aplicações cliente/
servidor na Web com JSP 2
6
Unidade: Programação de aplicações cliente/servidor na Web com JSP 2
Contextualização
Você está em dia com a Receita Federal?
Parece uma pergunta estranha para um material ligado à tecnologia. Porém, o tema pode
nos trazer um excelente exemplo do emprego da tecnologia para administração de declarações
no Brasil.
Segundo o site da memória da Receita Federal (https://goo.gl/ZLqz25), a primeira disposição
no Brasil sobre o imposto de renda ocorreu em outubro de 1843, em pleno início do segundo
reinado. Foram estabelecidas quais seriam as porcentagens que deveriam ser pagas de acordo
com os vencimentos dos cofres públicos recebidos por qualquer pessoa naquela época.
De 1843 para os tempos atuais, muitas coisas mudaram, por isso tente imaginar a dificuldade
que o governo tem para administrar essa grande quantidade de informações que devem ser
processadas, verificadas e acertadas quando necessário. Com a chegada da possibilidade de
implantação de sistemas cliente / servidor, podemos ver o avanço que o Imposto de Renda
obteve. Devido a essa tecnologia, a Receita consegue que cada contribuinte (cliente) possa
enviar de seu computador as informações pertinentes às suas declarações diretamente para o
servidor da Receita Federal.
Foi-se o tempo em que era necessário salvar suas declarações em um disquete e entregar
diretamente na Receita Federal de sua cidade onde cada disquete seria lido e processado. A
Receita criou o sistema chamado Receitanet que em sua ultima versão utiliza a tecnologia Java
para estabelecer a conexão cliente / servidor com os servidores da receita.
Apesar de ainda serem muitas informações como no passado, a velocidade e as possibilidades
que a receita tem de gestão e controle aumentaram muito desde o surgimento do Imposto de
Renda no Brasil. Este é um assunto que está presente em nosso cotidiano e que nos mostra
também o poder que existe na tecnologia quando bem empregada e administrada.
Fonte: https://goo.gl/ZLqz25
7
Banco de Dados em JSP
Muitos serviços disponíveis na Internet sósão possíveis devido à existência de meios para
criar e gerenciar banco de dados e aplicá-los a soluções Web. Várias são essas possibilidades
devido a diversas tecnologias que permitem a conexão com banco de dados. Vejamos uma
solução muito utilizada atualmente que consiste em utilizar os conceitos do JSP.
Estrutura
Para conceber uma solução, seja ela qual for, uma boa estrutura é fundamental. Para conexão
com banco de dados e JSP, temos algumas possibilidades.
Para esse tópico, iremos utilizar a estrutura abaixo:
• NetBeans IDE: Pacote Java EE 7.2, 7.3, 7.4, 8.0
• JDK: Versão 7 ou 8
• Servidor de banco de dados MySQL: 5.x
• Driver MySQL Connector/ J JDBC: versão 5.x
• GlassFish Server Open Source Edition: 3.x ou 4.x
Vamos, agora, entender cada elemento que compõe essa estrutura:
NetBeans IDE
Primeiro, pensamos em qual será o ambiente de desenvolvimento que iremos utilizar, ou seja,
escolhemos qual será a IDE (Integrated Development Environment) a ser utilizada. O escolhido
será NetBeans IDE por ser altamente aceito no mercado.
Download: https://netbeans.org/downloads/
JDK – Java Development Kit
O JDK é o Kit de Desenvolvimento Java que contém um conjunto utilitário que permite criar
sistemas para a plataforma Java; nele, podemos encontrar a máquina virtual Java (JVM), o
compilador Java, APIS do Java e diversas ferramentas e utilitários necessários para programação
em Java.
Download: https://goo.gl/pwI5tf
MySQL
O MySQL é um sistema de gerenciamento de banco de dados (SGBD) que usa a linguagem
SQL como interface. Atualmente mantida pela Oracle, é amplamente utilizada pelo mundo todo
tendo a Google e a Cisco como exemplo de clientes (TURNER, 2002).
Download: http://www.mysql.com/downloads/
Driver JDBC
O Driver JDBC (Java Database Connectivity) possibilita a conexão de uma aplicação Java a
um banco de dados. Podemos escolher diferentes drivers jdbc, dependendo de qual banco de
dados queremos conectar com nossa aplicação Java.
Download: http://dev.mysql.com/downloads/connector/j/5.1.html
8
Unidade: Programação de aplicações cliente/servidor na Web com JSP 2
GlassFish
Como estamos em um material que fala sobre conexões cliente/servidor era de se esperar
que, para conceber soluções Web, utilizando Java, se faz necessário o uso de um servidor
Web. O GlassFish é um servidor de aplicação para aplicações Java, ele é um software livre e
atualmente mantido pela Sun Microsystems que faz parte da Oracle; por suportar o JDBC, é
muito utilizado para conexão com banco de dados (TOOD, 2003).
Download: https://goo.gl/94xK5x
Testando a conexão com o Banco de Dados
Como o foco é a conexão do banco de dados com JSP, vamos considerar que o banco
de dados em MySQL já esteja pronto com algumas tabelas, mas sem os dados, os mesmo
virão do que o usuário irá digitar na página JSP. Para testarmos se existe a conexão entre
a IDE NetBeans e o MySQL, começamos criando um arquivo chamado por exemplo de
“testeBanco.jsp” no NetBeans.
Clique em Arquivo e Novo Projeto e a seguinte tela será exibida:
Escolhemos a opção Java Web e na lateral direita escolhemos Aplicações Web e clicamos no
botão Próximo:
Figura 1: Menu Arquivo no NetBeans.
Figura 2: Escolha do tipo de projeto.
9
Na tela abaixo, iremos colocar o nome do nosso projeto e clicar em Próximo:
Agora, podemos escolher qual será o servidor de nosso projeto, veja que neste caso podemos
escolher entre os dois servidores mais utilizados, o Apache Tomcat e o GlassFish. Vamos
selecionar o GlassFish, pois ele foi escolhido no início do projeto. Após a escolha do servidor,
você poderá clicar em Finalizar.
Após alguns segundos, o projeto será criado e o NetBeans deverá exibir a tela abaixo
(dependendo da versão do NetBeans que você estiver utilizando, o código HTML exibido
poderá ser diferente, não se preocupe).
Figura 3: Nomeação do projeto.
Figura 4: Seleção do servidor Web.
10
Unidade: Programação de aplicações cliente/servidor na Web com JSP 2
Dê um botão direito sobre o projeto, nosso primeiro JSP com BD, e vamos criar uma página
JSP. Para testar nossa conexão com o Banco de Dados, escolha a opção Novo e depois JSP, a
tela deverá ser como abaixo:
Escolha o nome da página JSP. No exemplo, iremos nomear como testeBanco. Clique em
finalizar, após alguns segundos, ele irá exibir o conteúdo da página JSP criada que deverá ser
semelhante à tela abaixo:
Figura 5: Esquema do projeto e index.html.
Figura 6: Criação da página JSP.
11
Perceba que agora podemos utilizar o <% ... %> característico do JSP em nossa página.
Iremos agora testar a conexão:
Veja no código utilizado na Figura 8, temos o <%@ page ... import=”java.sql.*”> que diz
ao JSP para realizar a importação necessária para conexão com o Banco de dados. Também
podemos perceber no código selecionado em verde-claro como é feito o teste de conexão,
temos um Try que recebe na variável “con” o DriverManager entre parênteses, há o endereço
de URL que iremos utilizar para nosso Banco (localhost:3306/teste) e ainda colocamos o
nome de usuário e senha (“root”,”root”) para que nosso projeto tenha acesso ao banco de
dados livremente.
Figura 7: testeBanco.jsp.
Figura 8: Código de conexão com o Banco de Dados.
12
Unidade: Programação de aplicações cliente/servidor na Web com JSP 2
Caso nossa conexão com o banco falhe, temos implementado após o Try o Catch que trata
a exceção do teste; caso o teste não seja bem sucedido, o Catch entra em ação e exibe a
mensagem “Não foi possível conectar ao banco”.
Este teste de conexão é apenas o primeiro passo para criar aplicações Web que envolvam
Banco de Dados. Agora, podemos implementar consultar, inserções e edições de informações
que estão em seu banco de dados.
Iremos agora conhecer mais um integrante da tecnologia Java presente em muitas
soluções Web e que permite ganhar maior rapidez no desenvolvimento de soluções, iremos
conhecer o JavaBeans.
O JavaBeans, conhecido às vezes apenas por Beans, é um modelo de componentes de
software reutilizável de Java. Para que fiquem claros seus conceitos, iremos tomar como
base um exemplo que pode ser encontrado no livro Java: Como Programar, no capítulo 25,
escrito por Deitel e Deitel (2010), pois nele está descrita a seguinte ideia: imagine que estamos
construindo uma solução Web que envolva animação e algumas pessoas estão envolvidas no
projeto, imagine que para conceber tal solução precisamos criar dois métodos o startAnimation
e o stopAnimation, o primeiro inicia a animação e o segundo a interrompe. Queremos agora
associar um botão ao startAnimation e outro botão ao stopAnimation, controlando assim a
nossa animação. Com o JavaBeans, a IDE de desenvolvimento faz todo o trabalho de associar
um evento de pressionar o botão com o método que desejamos chamar.
Dessa forma, um programador poderá desenvolver o método startAnimation sem ter o
conhecimento do que outro programador está desenvolvendo no método stopAnimation.
Quando ambos desenvolverem seus códigos, poderemos então pedir que a IDE associe
um botão para cada método, e mais, quando criarmos outra solução que também utilize o
startAnimation ou stopAnimation não precisaremos programar esta solução novamente, basta
“chamar” o arquivo JavaBeans que contém o startAnimation ou stopAnimation e pedir que
associe também a algum botão deste novo projeto, assim vários arquivos JavaBeans poderão
ser chamados de projetos diferentes.
Acesse:
https://netbeans.org/kb/docs/web/mysql-webapp_pt_BR.html#welcomePage
Nesse tutorial disponibilizado pela própria NetBeans em português, podemos
encontrar um exemplo prático passo a passo para criação de uma aplicação JSP
com banco de dados. Utilize os conhecimentos acima adquiridos e mãos à obra!
JavaBeans em JSP
13
Exemplo de JavaBeans
Dando sequência ao primeiro tópico em que conectamos o banco de dados, a nossa IDE,
iremos criar um JavaBeans que faça a mesma conexão, porém, teremos a diferença de não
implementar a conexão diretamente na páginaJSP como fizemos anteriormente, pois, agora,
quando precisarmos fazer a conexão com o banco de dados que iremos utilizar, basta “chamar”
esse JavaBeans e a conexão será feita. Assim, não repetimos os códigos necessários para
conectar ao banco várias vezes. Outra vantagem de utilizar o JavaBeans, no caso de conexão
com o banco, é a de que, se, por acaso, alterarmos a senha de nosso banco, basta alterar
uma vez no JavaBeans e, assim, todos os projetos que o utilizam irão usufruir desta mudança.
Quando não utilizamos JavaBeans, teremos que procurar os trechos de código que utilizamos
várias vezes para conectar ao banco e alterar uma um a nova senha.
Primeiramente, clique com o botão direito sobre o projeto criado no primeiro tópico e escolha
a opção Nova e depois Classe Java.
Na tela que segue, digite o nome dessa nova classe que será nosso JavaBeans, no exemplo
abaixo, escolhi o nome ConexaoBDJavaBeans, depois clique em Finalizar.
Agora que temos uma nova classe criada, vamos implementar o código abaixo:
Figura 9: Criando uma Classe Java.
Figura 10: Nomeação da Calsse Java.
14
Unidade: Programação de aplicações cliente/servidor na Web com JSP 2
Veja no código que temos o package e o “import” característico de uma classe Java e depois
o “public class ConexaoBDJavaBeans” que contém a conexão com o banco de dados. Foi
criada uma variável chamada situação do tipo String para que saibamos qual é a situação de
conexão com o banco.
Programamos o Try em que trazemos a utilização do driver de conexão ao banco e também
dizemos o endereço, ao qual está o banco (você poderá utilizar o IP ao qual o banco está caso
não estiver utilizando o localhost IP/Nome do banco) logo após o usuário e senha do banco.
No “Catch” do código tratamos a exceção, caso não aconteça a conexão com o banco, ele irá
atribuir a variável “situacao” à frase “não foi possível realizar a conexão”. E por fim retornamos
o valor da variável situação para sabermos se seu valor foi atribuído pelo “Try” ou “Catch”.
Este é apenas um simples exemplo de como podemos utilizar o JavaBeans ao longo do
desenvolvimento de uma solução Web. Além de permitir mais rapidez e reaproveitamento de
código, possibilita que várias pessoas trabalhem em um mesmo projeto sem necessariamente
que cada programador só possa realizar seu trabalho após outro a concluir. Essa característica
tem muito necessária no mercado atual onde uma equipe atua em um mesmo projeto,
principalmente se ele tiver grandes proporções.
Figura 11: Classe Conexão.
15
XML do inglês eXtensible Markup Language ou algo como Linguagem de Marcação
Extensível é uma linguagem de programação que permite organizar e estruturar dados de
forma fácil e simples para o programador. Ele pode ser utilizado para fornecer dados a diversas
aplicações e em diferentes computadores, da mesma forma que o HTML consegue organizar de
forma hierárquica a estrutura de uma página de internet o XML consegue organizar de forma
hierárquica informação como em um banco de dados (KOCHMER, 2002).
Vejamos um exemplo de criação de um arquivo XML utilizando a IDE NetBeans:
Dê um botão direito do mouse sobre o seu projeto e depois clique em Novo, e depois
Documento XML.
Na tela a seguir, escreva o nome do arquivo XML que desejar:
Na tela a seguir, selecione a opção Documento Formado Corretamente e depois Finalizar.
Vejamos um exemplo de XML criado pela própria W3C (http://www.w3schools.com/xml/
xml_examples.asp) que mantém e atualiza a linguagem XML:
XML em JSP
Figura 12: Criação de um arquivo XML.
Figura 13: Nomeação do arquivo XML.
16
Unidade: Programação de aplicações cliente/servidor na Web com JSP 2
Vamos entender alguns elementos que compõem o código da Figura 14, perceba que
utilizamos a tag <breakfast_menu> para iniciar nossa programação, por ser organizado de
forma hierárquica a IDE sabe que todas as informações abaixo até fecharmos a tag </breakfast_
menu> pertencem a “breakfast_menu” e assim podemos referenciá-las facilmente quando
precisamos fornecer alguma informação deste menu a outra aplicação.
Veja que dentro da tag <food> organizamos as informações que desejamos armazenar
como: <name> (nome), <price> (preço), <description> (descrição), <calories> (calorias),
qualquer aplicação de desejarmos ler nesse arquivo XML e a informação que precisarmos.
Vejamos agora um exemplo de como podemos integrar a linguagem XML a JSP extraído do
site tutorialspoint.com; este e outros tutoriais fáceis e educativos você pode encontrar neste link:
http://www.tutorialspoint.com/jsp/jsp_xml_data.htm
Primeiro, vamos criar nosso arquivo XML que contém os dados que serão lidos e alterados:
Perceba no código acima que temos a tag <book> indicando o início da hierarquia que
contém as informações: Nome, Autor e Preço de um livro.
Vamos agora visualizar o código da página JSP:
Figura 14: Exemplo de linguagem XML.
Figura 15: Código da página books.xml.
17
Na página JSP da Figura 16, temos o uso de duas Tags Libs definindo o “c” e o “x” como
prefixo das definições da java.sun que serão utilizado no <body>.
Perceba que, após o título “Book Info:”, temos o “c:import” definindo uma variável “bookinfo”
que servirá de referência ao arquivo book.xml que criamos inicialmente, perceba que a url dessa
mesma Tag faz referência ao localhost:8080/book.xml; caso esteja utilizando outro endereço ou
outra porta, você deve alterar neste local.
Definido a referência “bookInfo”, agora podemos ler o arquivo XML e trazer apenas as
informações que necessitamos. Veja que na tag “x:parse” definimos o XML como sendo a
referência bookInfo e criamos uma variável de saída chamada “output”. Agora vamos à leitura
do XML.
Na tag “x:out”, selecionamos exatamente a informação no arquivo XML que queremos,
“$output/books/book[1]/name”, através do “book[1], selecionamos a primeira tag <book>
que o arquivo XML possui e trazemos dela a informação contida dentro da tag <Name>,
o mesmo ocorre quando queremos extrair apenas o preço do segundo livro “$output/books/
book[2]/price”, a saída deste código será esta:
BOOKS INFO:
• The title of the first book is: Padam History
• The price of the second book: 2000
Devido à facilidade que encontramos em criar um arquivo XML, pois é muito similar a forma
que o HTML estrutura suas tags, podemos entender por que muitos programadores o utilizam
em suas aplicações. Apesar de fazer o papel de banco de dados, não é aconselhável quando
temos uma grande quantidade de dados pois os SGBS (Sistema Gerenciador de Banco de
Dados) atuais podem fornecer melhor a forma de armazenar e buscar informações.
Figura 16: Código da página index.jsp.
18
Unidade: Programação de aplicações cliente/servidor na Web com JSP 2
Outra linguagem muito utilizada como integração com o JSP é o JavaScript. Ele permite a
inserção de diversas funções diretamente em nossas páginas JSP ou HTML ou, se preferir, a
criação de um arquivo separado que contenha funções e recursos que podem ser acessados
diversas vezes (KURNIAWAN, 2002).
Vejamos uma aplicação bem simples de como podemos criar uma página de Login utilizada
amplamente em diversas soluções Web. Criaremos páginas para essa solução, criaremos uma
página chamada index.jsp, criaremos também uma página chamada principal.html e por último
nosso arquivo em JavaScript, scrip.jp.
Index.jsp
Crie um novo projeto no NetBeans do tipo Java Web, Aplicação Web, coloque o nome que
desejar; após a criação, crie uma nova página chamada índex.jsp, clicando com o botão direito
sobre seu projeto e depois Novo, JSP.
Nossa tela de Login será simples esteticamente, pois o foco é entender a integração de JSP
com JavaScript, porém, será base para que construa seus projetos mais elaborados. Nossa
página terá esta aparência:
Agora, vejamos o código da página index.jsp que foi utilizado para criar a tela acima:
JavaScript em JSP
Figura 17: Tela de Login exibida ao usuário (índex.jsp).
Figura 18: Código da página índex.jsp.
19
Vamos analisaro código acima, perceba que dentro da tag <head> temos a tag <scrip> e
nela definimos a propriedade LANGUAGE como JavaScript e apontamos através da propriedade
“src” o nome do arquivo que contém a programação em JavaScript que será necessária neste
código. Neste caso, o arquivo chama-se Login.js.
Mais abaixo, temos a tag <form>, na qual definimos que o nome do formulário será “login”,
esse nome será importante para que consigamos no arquivo Login.js saber onde encontrar os
elementos desse formulário. Dentro desse, formulário temos três elementos principais:
• Uma caixa de texto Usuário: <input type=”text” name=”username” size=”20”>.
• Uma caixa de texto Senha: <input type=”text” name=”password” size=”20”>.
• Um botão Entrar: <input type=”button” value=”Entrar” onClick=”Login()”>.
Perceba que na tag <input>, que é usada para criar o “button”, utilizamos um propriedade
chamada “onClick”, que é necessária para dizer ao código que quando o usuário pressionar
esse botão ele deverá chamar a função Login(). Por termos definido no início do código que
o arquivo que contém as funções JavaScript estão no arquivo Login.js, ao usuário clicar neste
botão, o código irá procurar a função Login() dentro do arquivo Login.js.
Login.js
Agora iremos criar o arquivo JavaScript. Dê um botão direito sobre o projeto criado, escolha
a opção Novo e depois Arquivo JavaScript, veja o código abaixo:
Começamos definindo o nome da função através do “function Login()”, assim “ligamos”
a ação do botão da página index.jp com esse arquivo JavaScript; dentro da função, criamos
uma variável chamada “username” que irá receber como valor o que o usuário digitou na
página dentro do campo “username” criado no formulário da página index.jsp. Veja agora
como atribuir valor à variável username.
Figura 19: Código da página script.js.
20
Unidade: Programação de aplicações cliente/servidor na Web com JSP 2
document.login.username.value;
O comando document define que iremos fazer referência a uma página. O login que vem logo
depois é o nome do formulário e o username é o nome da caixa de texto (<input type=”text”>)
que está dentro do formulário login e, por fim, colocamos o “value” para dizer ao código que
queremos o valor que foi digitado na página pelo usuário, o mesmo fazemos com o campo de
texto senha.
Também criaremos uma variável chamada “done” para nosso controle de teste no IF. Veja
que abaixo criamos dois IFs, no primeiro temos:
If(username == “teste” && senha == “12345”){
window.location = ‘Principal.html’;
done = 1;
}
Neste IF, definimos que, se a variável “username” for igual a “teste” e a variável senha
for igual a “12345”, então executamos a linha window.location = ‘principal.html’; que tem a
função de chamar a página principal.html sem abrir uma nova aba no navegador, assim criamos
um teste simples de login. Veja que ainda dentro deste IF atribuímos a variável done com valor
1; dessa forma, impedimos que o Segundo IF que informa erro no login seja ativado.
Principal.html
Por último, crie uma simples página HTML, chamada principal,html, clicando com o botão
direito em nosso projeto e depois Novo e HTML; coloque apenas um simples texto para que,
quando você testar seu projeto, e no Login colocar a palavra “teste” e no campo senha “12345”,
permitir que a página principal.html seja aberta na mesma página.
Este é um simples exemplo de utilização para que você entenda como o mecanismo de
chamada de um arquivo JavaScript funciona dentro de uma página JSP. Agora é só realizar os
teste e melhorar o projeto.
Agora que vimos como podemos integrar a linguagem XML e a linguagem JavaScript em
nossa solução em JSP, podemos entender melhor como funciona outra tecnologia Web que
também é integrável a JSP, o AJAX.
Ajax em JSP
21
AJAX é o acrônimo de Asynchroous Javascript and XML, ou seja, é uma tecnologia que utiliza
o JavaScript e o XML para desenvolver aplicações Web que tenham funcionalidade similares a
uma aplicação de desktop, ou seja, local (HANSEN, 2007).
Muitas vezes, necessitamos de soluções que se aplicam apenas a uma determinada parte
de nossa página. Imagine que, ao cadastrar um usuário, em cada novo campo de texto que
ele preenche toda a página, necessitasse ser carregada para validar aquele campo. Isso seria
muito ruim.
Outro exemplo é quando estamos realizando uma busca no Google e antes mesmo de
terminar a palavra o Google já nos traz sugestões daquilo que talvez você queira buscar. Nisso,
temos a sensação de que estamos executando alguma função local, apenas em nossa máquina
pela rapidez com que a sugestão nos é trazida. Eis o exemplo de chamada assíncrona, ou seja,
o AJAX irá fazer chamadas ao servidor sem uma determinada sincronia, ela fará chamadas ao
servidor apenas em certas ocasiões.
Para que você tenha mais conhecimento sobre o AJAX, acesse os tutoriais abaixo
que, além de gratuitos, permitem o entendimento passo a passo de uma construção
integrada entre AJAX e JSP:
http://www.programming-free.com/2012/08/ajax-with-jsp-and-servlet-using-jquery.html
https://www.udemy.com/blog/jsp-ajax/
22
Unidade: Programação de aplicações cliente/servidor na Web com JSP 2
Material Complementar
Como complemento desta unidade, sugerimos a leitura completa do capítulo 25 do livro:
Sugerimos, também, a leitura completa do livro:
Boa leitura a todos!
DEITEL, H. M.; DEITEL, P. J. Java. Como Programar. 8 ed. São Paulo: Prentice Hall, 2010.
TODD, N.; SZOLKOWSKI, M. Javaserver Pages. O Guia do Desenvolvedor. Rio de Janeiro:
Elsevier, 2003.
23
Referências
DEITEL. H. M.; DEITEL, P. J. Java. Como Programar. 8 ed. São Paulo: Prentice Hall, 2010.
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.
KURNIAWAN, B. Java Para a Web Com Servlets, Jsp e Ejb. Rio de Janeiro: Ciência
Moderna, 2002.
TODD, N.; SZOLKOWSKI, M. Javaserver Pages. O Guia do Desenvolvedor. Rio de Janeiro:
Elsevier, 2003.
TURNER, J. Mysql And Jsp Web Applications. Usa: Sams, 2002.
24
Unidade: Programação de aplicações cliente/servidor na Web com JSP 2
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