Baixe o app para aproveitar ainda mais
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”>
Compartilhar