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