FUNDAÇÃO DE ENSINO “EURÍPIDES SOARES DA ROCHA” CENTRO UNIVERSITÁRIO EURÍPIDES DE MARÍLIA – UNIVEM TRABALHO DE CONCLUSÃO DE CURSO NELSON GUIMARÃES RAPHAEL ZANON RODRIGUES APLICAÇÕES WEB COM AJAX MARÍLIA 2007 1 NELSON GUIMARÃES RAPHAEL ZANON RODRIGUES APLICAÇÕES WEB COM AJAX TCC – Trabalho de Conclusão de Curso entregue a Fundação Eurípides Soares da Rocha. Sob orientação do Prof. Ms. Elvis Fusco, como requisito parcial para obtenção do título de Bacharel em Administração com habilitação em Análise de Sistemas. MARÍLIA 2007 2 AMARAL, Nelson Guimarães do; RODRIGUES, Raphael Zanon. Aplicações Web com Ajax. / Nelson Guimarães do Amaral; Raphael Zanon Rodrigues; orientador Elvis Fusco. Marília, SP:[s.n.], 2007. 73 f. Dissertação (Bacharelado em Administração com Habilitação em Análise de Sistemas) – Centro Universitário Eurípides de Marília, Fundação de Ensino Eurípides Soares da Rocha, Marília, 2007. 1. Conceitos 2. Ajax 3. Estudo de caso. CDD: 004.6783 3 4 AGRADECIMENTOS Agradecemos primeiramente a Deus por ter-nos dado a capacidade suficiente para concluir este trabalho que marca o fim de mais uma fase de nossas vidas. é impossível agradecer a todas as pessoas que nos acompanharam nesta jornada e que certamente estarão nos apoiando a chegar ainda mais longe, mas temos a certeza de que se tivéssemos percorrido todo o caminho sozinhos, certamente teria sido mais difícil, por isso, queremos agradecer a todas as pessoas que por ventura não foram citadas diretamente nas próximas linhas. Gostaríamos de agradecer em segundo lugar às nossas famílias, os responsáveis por nós sermos como somos hoje. Juntamente com eles, Gostaríamos de agradecer às nossas companheiras que nos apoiaram e que desde já estão fazendo sacrifícios pelo nosso futuro profissional e acadêmico. Gostaríamos de agradecer também a todos os nossos grandes professores, que nos incentivam desde o início do colégio até o fim da graduação e agradecemos ainda a nossos amigos que nos entenderam e deram força nos momentos que hesitamos. Por fim, queremos agradecer às mesmas pessoas que citei no início e que não foram citadas aqui, e que ainda teremos muito tempo pra agradecer pessoalmente a cada um de vocês. A todos, nosso muito obrigado de coração. 5 "Os Problemas não podem ser resolvidos em um mesmo nível de pensamento no qual foram gerados" Albert Einstein 6 AMARAL, Nelson Guimarães do; RODRIGUES, Raphael Zanon. Aplicações Web com Ajax. 2007. 73 f. Dissertação (Bacharelado em Administração com Habilitação em Análise de Sistemas) – Centro Universitário Eurípides de Marília, Fundação de Ensino Eurípides Soares da Rocha, Marília, 2007. RESUMO Com o crescente aumento da utilização de aplicações web devido à popularização da internet banda larga e o conseqüente aumento na necessidade de recursos cada vez mais avançados como linguagens e técnicas de desenvolvimento, este trabalho apresenta a metodologia de desenvolvimento de uma aplicação web com AJAX, como ela funciona, suas vantagens e desvantagens. São abordadas as características das principais tecnologias que compõem esta metodologia de desenvolvimento como, por exemplo, o HTML, JavaScript, XML, CSS e DOM. A seguir são mostradas as tecnologias que se integram resultando no AJAX, que resumidamente é a apresentação dos dados para o usuário sem a necessidade de recarregar toda a página, com os principais métodos e a forma de utilização deles, além da apresentação de alguns frameworks que auxiliam no desenvolvimento e os conceitos que compõe a Web 2.0. Por fim, é proposto um estudo de caso com base na tecnologia de desenvolvimento .NET oferecida pela Microsoft composta pelo ambiente de desenvolvimento Visual Studio 2005, a framework ASP.NET AJAX 2.0 e o banco de dados SQL Server 2005. Esta aplicação é baseada nos conceitos apresentados durante o trabalho em conjunto com o ambiente de desenvolvimento que auxilia no desenvolvimento da aplicação juntamente com o framework ASP.NET AJAX, mostrando as facilidades para o desenvolvimento de aplicações utilizando uma framework. Palavras-Chave: Desenvolvimento Web, AJAX, Framework, Web 2.0. 7 AMARAL, Nelson Guimarães do; RODRIGUES, Raphael Zanon. Aplicações Web com Ajax. 2007. 73 f. Dissertação (Bacharelado em Administração com Habilitação em Análise de Sistemas) – Centro Universitário Eurípides de Marília, Fundação de Ensino Eurípides Soares da Rocha, Marília, 2007. ABSTRACT With the increase of the utilization of web applications due to the popularization of the bandwidth internet fallowing as a result of the need of advanced resources, as language and development technique, this research present the development methodology of web application with AJAX, such as, how it works, advantages and disadvantages. Boarding the characteristics of the main technologies that are part of this development methodology, as example, HTML, JavaScript, XML, CSS and DOM. Following is shown how this technologies are integrated resulting AJAX, in other words it is the way how the data is showed to the user even before the full load of the page, with the main methods and how to use them, besides the presentation of some frameworks which assist the development and the concepts that compound the Web 2.0. Lastly, a case study based on the technology .NET offered by Microsoft part of the Visual Studio 2005, framework ASP.NET AJAX 2.0 and the database SQL Server 2005. This application is based on the concepts showed during the research combined with the development environment which supports the application development amongst ASP.NET AJAX, showing the facility to develop applications using framework. Keywords: Web development, AJAX, Framework, Web 2.0 8 LISTA DE ILUSTRAÇÕES FIGURA 01 – Arquitetura da plataforma .NET ........................................................................... 14 FIGURA 02 – Acesso a Base de Dados por meio do ADO.NET ................................................ 16 FIGURA 03 – Funcionamento do ADO.NET .............................................................................. 17 FIGURA 04 – Visão geral da arquitetura ASP.NET .................................................................... 19 FIGURA 05 – Modelo de Code-Behind no ASP.NET ................................................................. 20 FIGURA 06 – Modelo tradicional de aplicação web ................................................................... 27 FIGURA 07 – Árvore de um documento HTML simples ............................................................ 31 FIGURA 08 – Conceitos da Web 2.0 ........................................................................................... 35 FIGURA 09 – Tecnologias utilizadas pelo AJAX ....................................................................... 40 FIGURA 10 – Apresentação da página Default.aspx sem CSS ................................................... 56 FIGURA 11 – Apresentação da página Default.aspx com CSS ................................................... 59 FIGURA 12 – Tabelas do Banco de Dados .................................................................................. 60 FIGURA 13 – Modelo de apresentação no Visual Studio ............................................................ 65 FIGURA 14 – Mensagem de progresso sendo apresentada ......................................................... 68 9 LISTA DE LISTAGENS Listagem 01 – Instanciando um objeto e utilizando método OPEN ............................................. 47 Listagem 02 – Utilizando método SEND ..................................................................................... 48 Listagem 03 – Retorno XML ........................................................................................................ 48 Listagem 04 – Atribuir Função ..................................................................................................... 48 Listagem 05 – Verificando Estado ............................................................................................... 49 Listagem 06 – Resposta do Servidor ............................................................................................ 49 Listagem 07 – Impressão no Navegador ...................................................................................... 50 Listagem 08 – Exemplo completo de AJAX ................................................................................ 51 Listagem 09 – Código da página Default.aspx ............................................................................. 55 Listagem 10 – Código CSS .......................................................................................................... 58 Listagem 11 – Código da diretiva @Page .................................................................................... 58 Listagem 12 – Consulta de grupos ............................................................................................... 61 Listagem 13 – Consulta de usuários do grupo .............................................................................. 61 Listagem 14 – Tabelas do Banco de Dados .................................................................................. 62 Listagem 15 – Vinculação do dado na propriedade Text do rótulo .............................................. 63 Listagem 16 – Atualização dos dados vinculados aos rótulos ...................................................... 63 Listagem 17 – Posicionamento dos controles UpdatePanel ......................................................... 64 Listagem 18 – Código dos controles UpdateProgress .................................................................. 67 10 LISTA DE ABREVIATURAS ADO: ActiveX Data Objects AJAX: Asynchronous Javascript And XML API: Applications Programming Interface ASP: Active Server Pages CGI: Common Gateway Interface CLR: Common Language Runtime CLS: Common Language Specification CSS: Cascading Style Sheets DHTML: Dynamic HTML DOM: Document Object Model ECMA: European Computer Manufacturers Association GML: General Markup Language HTML: HyperText Markup Language IIS: Internet Information Services JIT: Just In Time MSIL: Microsoft Intermediate Language OO: Orientação a Objetos SGML: Standard Generalized Markup Language SOAP: Simple Object Protocol W3C: World Wide Web Consortium XML: eXtensible Markup Language 11 SUMÁRIO INTRODUÇÃO ............................................................................................................................ 11 1. CONCEITOS ............................................................................................................................ 12 1.1. NET ....................................................................................................................................... 12 1.1.1. Framework .......................................................................................................................... 17 1.2. ASP.NET ............................................................................................................................... 18 1.3. C# ........................................................................................................................................... 21 1.3.1. Orientação a Objetos .......................................................................................................... 22 1.4. JavaScript ............................................................................................................................... 23 1.5. CSS ……………………………………………………………............................................ 26 1.6. HTML ……………………………………………………………........................................ 28 1.7. DHTML ................................................................................................................................. 28 1.8. DOM ...................................................................................................................................... 29 1.9. XML ...................................................................................................................................... 31 1.10. WEB 2.0 .............................................................................................................................. 33 2. AJAX ........................................................................................................................................ 36 2.1. Conceitos ............................................................................................................................... 36 2.2. Aplicações ............................................................................................................................. 37 2.3. Estado da Arte ....................................................................................................................... 38 2.4. Tecnologias Utilizadas Pelo Ajax .......................................................................................... 39 2.5. Frameworks ........................................................................................................................... 40 2.6. XMLHttp ............................................................................................................................... 44 2.7. XMLHttpRequest .................................................................................................................. 45 2.8. Funcionamento ...................................................................................................................... 46 2.9. Exemplos ............................................................................................................................... 47 2.10. Limitações ........................................................................................................................... 51 3. ESTUDO DE CASO ................................................................................................................ 53 3.1. Resultados obtidos ................................................................................................................. 68 CONSIDERAÇÕES FINAIS ....................................................................................................... 70 REFERÊNCIAS ........................................................................................................................... 71 12 INTRODUÇÃO Ao longo do trabalho, busca-se conceituar as tecnologias envolvidas na metodologia AJAX, mostrando como elas funcionam e como elas se integram para atingir um melhor resultado nas aplicações. O termo AJAX significa Asynchronous Javascript And XML, sendo utilizado para especificar a utilização em conjunto de tecnologias que torna possível às aplicações Web serem mais dinâmicas, evitando o reload total da página a cada informação requisitada pelo usuário, atualizando apenas o que for realmente necessário. No primeiro capítulo, temos como objetivo apresentar dos conceitos da plataforma .NET e juntamente com o ASP.NET, mostrando seus conceitos e como a plataforma funciona, dando suporte para o desenvolvimento de uma aplicação web. Neste mesmo capítulo, são apresentadas as tecnologias que envolvem o AJAX e a forma com que elas interagem com as requisições realizadas ao servidor da aplicação web, sendo apresentado também o conceito da Web 2.0 que se baseia em aplicações mais dinâmicas, que permitem que os usuários não sejam apenas receptores das informações, mas também, um produtor delas. O objetivo do capítulo seguinte é definir os conceitos do AJAX, apresentando os tipos de aplicações que ele deve ser inserido, alguns frameworks que auxiliam no desenvolvimento, os principais métodos seguidos de exemplos de como utilizá-los e as limitações que o AJAX possui. O último capítulo tem como objetivo demonstrar o desenvolvimento de uma aplicação Web que faz uso das tecnologias descritas anteriormente em conjunto com a metodologia de desenvolvimento AJAX, como também apresentar algumas tecnologias de desenvolvimento que auxiliam nas tarefas do desenvolvedor seguido de uma descrição dos resultados obtidos com o desenvolvimento. 13 1. CONCEITOS Neste capítulo serão apresentados conceitos das tecnologias básicas para o desenvolvimento de uma aplicação Web utilizando a metodologia de desenvolvimento AJAX. 1.1. NET A plataforma .NET é uma tecnologia de desenvolvimento da Microsoft, representando uma significativa evolução nos pensamentos da empresa, sendo considerada uma melhoria significativa sobre as tecnologias anteriormente desenvolvidas. De acordo com Turtschi et al (2004, p.2), “A plataforma .NET é a fundação sobre a qual a próxima geração de softwares será construída”. Para completar, o Turtschi et al (2004, p.2) diz que “A plataforma .NET é muito mais de que uma linguagem, um kit de programação ou mesmo um sistema operacional. Ela oferece novos e poderosos recursos”, não sendo possível usar eficientemente essas novas ferramentas sem um forte conhecimento da plataforma. O desenvolvimento da plataforma .NET teve alguns objetivos como segurança, redimensionabilidade, confiabilidade, flexibilidade e interoperabilidade, tendo como objetivo tornar a plataforma .NET pronta para a empresa e amigável para o programador, tornando única para o desenvolvimento e a execução de sistemas e aplicações, sendo invocadas através dela todas as funções necessárias ao funcionamento dos programas rodando independentemente do sistema operacional. A plataforma .NET é executada sobre uma aplicação similar a uma maquina virtual chamada de Common Language Runtime (CLR). Segundo Turtschi et al (2004, p.2), a CLR é “Um ambiente de execução gerenciado que manipula alocação de memória, detecção de erro e 14 interação com os serviços do sistema operacional”, sendo encarregada da execução das aplicações, para isso a CLR interage com uma coleção de bibliotecas unificadas formando o framework.NET que possui numerosos serviços que servem para facilitar o desenvolvimento e a manutenção das aplicações. Suportando tecnologias como: modelo de programação simples (procedural), programação orientada a objetos e a coleta de lixo. Devido a coleção de bibliotecas da CLR, a Microsoft e terceiros estão desenvolvendo versões adaptadas à .NET, permitindo utilizar uma grande variedade de diferentes linguagens de programação tais como: Fortran, Pascal, C++, Perl, C#, Python, COBOL, Microsoft JScript, SmallTalk, Oz, Microsoft Visual Basic, Delphi, Eiffel, Java, Ruby e outras. Com isso, qualquer código compilado para .NET pode ser executado em qualquer dispositivo ou plataforma que contenha o framework.NET, assim, o programador não escreve mais os códigos para um dispositivo ou um sistema específico, mas agora, ele escreve os códigos para a plataforma .NET, eliminando assim o problema de compatibilidade entre Dynamic Link Libraries (DLL), tão conhecido e enfrentado em outras plataformas de desenvolvimento da Microsoft. A base da arquitetura da plataforma .NET é o CLR. Ele foi baseado na utilização de compiladores Just In Time (JIT), onde executa um código intermediário chamado de Microsoft Intermediate Language (MSIL) escrito em qualquer das linguagens de programação suportadas pela Common Language Specification (CLS). De acordo com o Turtschi et al (2004, p.10) “Como todo código visando a plataforma .NET roda com o ambiente CLR, ele é chamado de código gerenciado.”, isso porque a compilação e o comportamento definido nos metadados do código é gerenciado pelo CLR. Os metadados são um recurso mantido durante a compilação e consultado em runtime pelo CLR permitindo que o mesmo saiba detalhes de como instanciar os objetos, chamar seus métodos e acessar suas propriedades. Segundo Turtschi et al (2004, p.12), “As aplicações .NET são distribuídas como 15 assemblies, que podem ser um único executável ou uma coleção de componentes.”. Ao criar uma aplicação .NET em uma linguagem escolhida é gerado um arquivo chamado de Assembly que nada mais é do que um padrão de bits, ou seja, a linguagem de máquina que se torna legível pela substituição dos valores por símbolos de acordo com o tipo do projeto com informações da versão, outros assemblies referenciados por este e suas respectivas versões, os tipos contidos no assembly, permissões de segurança e qualquer outro atributo personalizado. Já na execução do programa, esse arquivo é novamente compilado por meio do CLR de acordo com o ambiente de utilização do programa. O fato de esta arquitetura utilizar a MSIL gera uma possibilidade pouco desejada entre os criadores de software que é a de fazer a "engenharia reversa", ou seja, recuperar o código original a partir de um código compilado. Esta não é uma idéia agradável para as empresas que sobrevivem da venda de softwares produzidos na plataforma .NET. Devido a esta característica, existem ferramentas que ofuscam este código MSIL, trocando nomes de variáveis, métodos, interfaces e outros para dificultar o trabalho de quem tentar uma engenharia reversa num código compilado MSIL. Figura 01 – Arquitetura da plataforma .NET Como é possível ver na Figura 01, todas a linguagens da plataforma .NET são 16 compiladas gerando um código MSIL de acordo com a sua respectiva CLS. No próximo nível estão os dois tipos principais de desenvolvimento de aplicação, sendo eles os Web Services e os Windows Forms. Essas aplicações se comunicam usando o XML e o Simple Object Protocol (SOAP) que obtém suas funcionalidades da Base Class Library e rodam no ambiente CLR. Ao lado, é mostrado o Visual Studio.NET que não é necessário para o desenvolvimento de uma aplicação .NET, porém, sua arquitetura o torna uma escolha ideal para o desenvolvimento de software nesta plataforma. Outro ponto bastante forte da plataforma .NET é o gerenciamento automático de memória mais conhecido como coleta de lixo. No desenvolvimento em C e outras linguagens que não possuíam esse recurso, os desenvolvedores despendiam muito tempo procurando por falhas de memória em seus códigos. Segundo Turtschi et al (2004, p.13), “a coleta de lixo é executada quando sua aplicação está aparentemente fora de memória livre ou simplesmente quando ela é chamada”, ou seja, quando a aplicação solicita mais memória e não existe mais memória disponível, a coleta de lixo é chamada. Para que o coletor possa liberar espaço na memória, ele sai verificando todos os objetos que a aplicação faz referências, logo após ele realoca esses objetos na memória e atualiza as referências da aplicação para apontarem para a nova posição dos objetos na memória. Depois de feito esse processo de realocação e atualização das referências, o coletor de lixo move a posição o ponteiro da memória para logo após o último objeto referenciado determinando para começar a alocar a memória a partir desse ponto. Para acesso a base de dados, a Microsoft desenvolveu o ADO.NET, sendo este o sucessor do ActiveX Data Objects (ADO) clássico. De acordo com Turtschi at al (2004), a Microsoft está posicionado o ADO.NET para ser a principal ferramenta de acesso a dados do .NET Framework, Turtschi et al (2004, p.256) diz ainda que “Isso irá garantir que a arquitetura de acesso a dados será madura e robusta, já que todas as linguagens do Common Language 17 Runtime (CLR) estarão usando o ADO.NET como principal meio de comunicação com os provedores de dados”. A Figura 02 mostra a interação de aplicações desenvolvidas para algumas plataformas diferentes interagindo com o ADO.NET que realiza o acesso à base de dados. Figura 02 – Acesso a Base de Dados por meio do ADO.NET O desenvolvimento do ADO.NET foi baseado na estrutura do eXtensible Markup Language (XML) o que proporciona um rico suporte para tais documentos. Os objetos do ADO.NET são coerentes com a especificação do XML, o que torna possível abrir um documento XML simples, alterar os dados e salvá-lo, sendo muito útil para a persistência. O ADO.NET possui duas novas formas que trabalham juntas para servir os dados, são elas. A primeira é o DataSet que segundo Turtschi et al (2004) pode ser considerado um banco de dados relacional que fica alocado na memória do computador, porém, desconectado da base de dados e não sabe de onde vieram os dados. O DataSet possui provisões para tarefas múltiplas, relações, chaves primárias, visualizações, classificações entre outros. A segunda forma de servir os dados é com o DataReader onde este é uma estrutura que possui um único sentido, não é atualizável e segue apenas para a frente, sendo utilizado para realizar acessos de leitura a dados. 18 Figura 03 – Funcionamento do ADO.NET Quando citado anteriormente, as ferramentas DataSet e o DataReader trabalham juntas, isso porque o DataSet não é conectado diretamente à fonte de dados, o que torna necessária a utilização de um DataAdapter que representa a conexão com a base e é onde ficam guardados os comandos para preencher o DataSet, como mostra a Figura 03. É nesse momento que entra o DataReader, pois o DataAdapter utiliza um DataReader para ir até a base de dados e realizar a busca para preencher o DataSet com os dados requisitados. 1.1.1. Framework No desenvolvimento do software, um framework é uma estrutura de suporte definida em que outro projeto de software pode ser organizado e desenvolvido. De acordo com Gonçalves (2006, p. 351), “Um framework é um conjunto de melhores práticas resolvidas sobre os problemas mais comum encontrados em um mesmo lugar.”. Um framework pode incluir programas de suporte, bibliotecas de código, linguagens de script e outros softwares para ajudar a 19 desenvolver e juntar diferentes componentes de um projeto de software, sendo projetadas com a intenção de facilitar o desenvolvimento de software. Um Framework se diferencia de um simples toolkit (biblioteca), pois este se concentra apenas em oferecer implementações de funcionalidades sem definir a reutilização de uma solução de arquitetura. 1.2. ASP.NET ASP.NET é uma tecnologia de processamento de solicitação HyperText Transfer Protocol (HTTP) da Microsoft utilizado para transferências de dados pela internet, que evoluiu durante os últimos anos, tornando-se segundo Shepherd (2006) uma das tecnologias mais consistentes, estáveis e ricas com vários recursos disponibilizados para gerenciar as solicitações HTTP. De acordo com Turtschi et al (2004) “O ASP.NET é a atualização da Microsoft para o Active Server Pages (ASP).”. Devido a uma mudança na maneira de desenvolver partindo do ASP clássico que praticamente não tinha ferramentas próprias e ganhando um ambiente completo, conseguindo assim um aumento no desempenho, flexibilidade e redução no trabalho de codificação, podendo escrever páginas ASP.NET em qualquer uma das linguagens suportadas pelo CLR e tendo um aumento significativo no desempenho, pois os códigos são compilados, o que traz mais rapidez e confiabilidade ao código fonte. O ASP.NET é um componente do Internet Information Services (IIS) - servidor web desenvolvido pela Microsoft para seus sistemas operacionais de servidores que segundo Shepherd (2006, p. 37), “o IIS intercepta a solicitação e busca o recurso identificado pelo URL” retornando a resposta para o navegador que fez a solicitação. O IIS permite através de uma linguagem de programação integrada na .NET Framework criar páginas dinâmicas, ou seja, sempre que uma página é requisitada pelo navegador, ela será executada pelo servidor e a partir daí serão gerados 20 códigos em HTML com o resultado dos processos que será enviado para o navegador que o solicitou como mostra a Figura 04. Figura 04 – Visão geral da arquitetura ASP.NET Uma das melhorias para o desenvolvedor é na hora de alterar algum código ou o layout da pagina. Antes do ASP.NET era necessário alterar dentro do código HTML existente, o que se tornava complicado e dificultava a manutenção. No ASP.NET existem dois arquivos separados, um de layout e outro com o código, sendo que existe uma linha que vincula os arquivos, isso se chama Code Behind. O modelo code-behind vincula um arquivo somente de código ao arquivo ASPX que contém marcas de apresentação. Portanto, o design pode ser feito sem nenhum problema, inclusive as alterações. Em paralelo o programador pode desenvolver o código, mas também é possível o desenvolver ir inserindo o código dentro da página de design. A Figura 05 mostra como a aplicação em ASP.NET é compilada antes da implantação da aplicação, onde é gerado um arquivo em Assembly que contém todos os arquivos code-behind compilados, por outro lado, a pagina ASPX é compilada em tempo de execução na primeira solicitação em conjuntos de módulo, o que o torna vantajoso pois as próximas requisições serão 21 carregadas a partido dos módulos. Figura 05 – Modelo de Code-Behind no ASP.NET Como o ASP.NET foi projetado como uma estrutura aberta, muitos módulos e componentes que constituem o ASP.NET podem ser estendidos, por exemplo, uma aplicação para web desenvolvida em ASP.NET pode reutilizar código de qualquer outro projeto escrito para a plataforma .NET, mesmo que em linguagem diferente. Uma página ASP.NET escrita em VB.NET pode chamar componentes escritos em C# ou Web Services escritos em C++, por exemplo. Ao contrário da tecnologia ASP, as aplicações ASP.NET são compiladas antes da execução, trazendo um sensível ganho de desempenho. As aplicações Web ASP.NET necessitam do framework .NET e do servidor IIS para executar, pelo menos na plataforma Windows. Existem alguns projetos que estão se esforçando para permitir que aplicações ASP.NET possam ser executadas em outras plataformas, como por exemplo, o projeto Mono para o Linux. 22 1.3. C# O CSharp (C# pronuncia-se "cê chárp" em português ou "cí charp" em inglês) é uma linguagem de programação orientada a objetos criada pela Microsoft junto com a arquitetura .NET, e que teve como base para o desenvolvimento do C# a linguagem C++ e Java. De acordo com Turtschi et al (2004, p. 22) “A C# é uma linguagem moderna. Ela suporta o conceito de tipos de dados, fluxo de instruções de controle, operadores, arrays, propriedades e exceções.”, ele ainda diz que o C# é uma linguagem orientada a objetos e que suporta o conceito de classes e toda a natureza orientada a objetos, incluindo encapsulamento, a herança e o polimorfismo. O C# está altamente vinculada ao .NET framework suportando interfaces como a coleta de lixo do CLR sendo, a partir deste vinculo que ele obtém suas classes e/ou funções para a execução da aplicação. O código em C# é organizado em um conjunto de namespaces (NameSpaces são, ao "pé-da-letra", Espaços para Nome, ou seja, é possível atribuir um nome para um elemento, criando assim o seu próprio elemento) que agrupam as classes com funções similares para sistemas diferentes. Embora tenham várias outras linguagens que suportam a tecnologia .NET, o C# é considerada a linguagem principal dessa arquitetura, isso se deve ao fato dela ter algumas vantagens como: • Foi totalmente desenvolvida para rodar na nova plataforma da Microsoft, sendo assim, não apresenta problemas de compatibilidade; • O compilador do C# foi o primeiro a ser desenvolvido, tornando-se base para os demais; • A maior parte das classes desse framework foi desenvolvida na linguagem C#; As estruturas de dados primitivas do C# são objetos que correspondem a tipos em .NET. 23 A desalocação automática de memória pelo coletor de lixo além de várias de suas abstrações tais como classes, interfaces, delegados e exceções são nada mais que a exposição explicita dos recursos do ambiente .NET. Muitos dos produtos e iniciativas da Microsoft geram polêmica no campo político e a criação e desenho da C# não foi exceção. Devido à natureza fechada do C# com uma instituição comercial, a discussão política continua em relação à legitimidade da sua normalização, a sua semelhança com Java, o seu futuro como uma linguagem para uso generalizado e outros assuntos. Alguns peritos em segurança encontram-se cépticos em relação à eficácia do mecanismo de segurança do CLR e criticam a sua complexidade. Ao contrário de linguagens proprietárias, tal como o Visual Basic, a Microsoft optou por submeter a C# a um processo de normalização. No entanto, a Microsoft continua a ser a principal força a induzir mudanças e inovação na linguagem. Além disso, a Microsoft tornou bem claro que a C#, tal como outras linguagens .NET, é uma parte importante da sua estratégia de software, tanto para uso interno e para consumo externo. A Microsoft se encarrega ativamente do papel de publicitar a linguagem como uma componente da sua estratégia global de negócios. 1.3.1. Orientação a Objetos A orientação a objetos (OO), ou também conhecida como programação orientada a objetos (POO) ou ainda em inglês Object-Oriented Programming (OOP) é um paradigma de análise, projeto e programação de sistemas baseado na composição e interação entre os dados chamados de objetos. De acordo com Gonçalves (2006, p. 14), “Um objeto é uma entidade tida por nós como sólida. Um computador, um carro, um cachorro, por exemplo, são objetos do mundo físico.”, tais objetos possuem propriedades e métodos. Por meio das propriedades, é 24 possível modificar os objetos e a mesma propriedade pode ser aplicada a diferentes objetos. Os métodos indicam quais ações os objetos podem realizar. As classes são unidades de programação que contêm propriedades e conjuntos de métodos que manipulam os dados e é a partir da classe que os objetos são instanciados, ou seja, criados em algum momento para realizar alguma tarefa. Com base em Deitel et al (2003), na programação orientada a objetos, são determinadas um conjunto de classes necessárias para implementar o sistema, as propriedades e os métodos necessários definem como um objeto de cada classe colabora para atingir os objetivos do sistema, ou seja, cada classe encapsula o comportamento e estados possíveis de seus objetos por meio dos métodos e atributos respectivamente, como também o relacionamento com outros objetos sendo eles amarrados entre si. Segundo Deitel et al (2003, p.373), “embora os objetos possam saber como se comunicar uns com os outros por meio de interfaces bem definidas, os objetos não tem permissão para conhecer como os outros objetos são implementados”, tais detalhes referentes à implementação, ficam restritos dentro dos próprios objetos. As linguagens de programação mais importantes com suporte a orientação a objetos são: Smalltalk, Perl, Python, Ruby, Php, ColdFusion, C++, Object Pascal, Java, JavaScript, ActionScript e C#. 1.4. JavaScript Com base em Gonçalves (2006), o JavaScript é uma linguagem de programação desenvolvida por Brendan Eich da Netscape no ano de 1995 e se trata da primeira linguagem de script da web a ser introduzida e é a mais popular por ser quase tão fácil como o HTML. A princípio se chamava LiveScript, e pretendia atender algumas necessidades que surgiram de 25 acordo com a evolução da web que se tornava mais dinâmica e tinha a necessidade de ter maior interação com o usuário como por exemplo a validação de formulários no lado cliente, tomar decisões e realizar outras validações simples que não eram possíveis de serem feitos utilizando a linguagem de marcação de texto simples como o HTML. As linguagens de script são mais simples por possuir uma sintaxe fácil de aprender, além de permitirem combinar script com HTML para criar páginas da Web interativas. De acordo com Flanagam (2004, p. 19) “JavaScript é uma linguagem de programação leve, interpretada e com recursos de orientação a objetos”. Por ser uma linguagem interpretada o navegador executa cada linha de script como as recebe, por isso é importante saber que o JavaScript é sensível ao tipo de letra em sua sintaxe. Portanto, é necessário que seja obedecida a forma de escrever os comandos, caso contrario o JavaScript interpretará, por exemplo, o que seria um comando, como sendo o nome de uma variável. Esses pontos são o que diferem o JavaScript de outras linguagens de programação que devem ser compiladas ou traduzidas em código de máquina antes de serem executadas. O JavaScript não tem quase nenhuma semelhante com o Java a não ser pelo nome e a sintaxe de ambas as linguagens que têm por base as linguagens C e C++. De acordo com Gonçalves (2006, p. 13), “Enquanto Java é uma linguagem de programação avançada e poderosa[...] o JavaScript é uma linguagem de scripts[...] e que depende de um programa que a interprete”. O que os torna totalmente diferente no conceito e no uso, como por exemplo, a tipagem dinâmica onde os tipos das variáveis não são definidos, é uma linguagem interpretada e não compilada, oferece um bom suporte a expressões regulares e possui ótimas ferramentas padrão para listagens, sendo as duas últimas, características das linguagens de script. Utilizando o JavaScript é possível realizar tarefas diversas como adicionar mensagens que rolam na tela, alterar as mensagens na linha de status do navegador, validar os conteúdos de 26 um formulário, fazer cálculos, exibir mensagens para o usuário, tanto como parte de um pagina da web como em caixas de alertas, fazer animações de imagens ou criar imagens que mudam quando você move o mouse sobre elas, detectar o navegador em utilização e exibir conteúdo diferente para navegadores diferentes, detectar plug-ins instalados e notificar o usuário se um plug-ins foi exigido. A partir do JavaScript foi desenvolvido um padrão conhecido como European Computer Manufacturers Association (ECMA) que é o responsável pela padronização de grande parte das tecnologias que já utilizamos ou que ainda utilizaremos. O ECMA define apenas características intrínsecas da linguagem e seu compilador (no caso do JavaScript, interpretador), tais como: Sintaxe, Convenções léxicas, Tipos e Conversões, operadores e expressões aritméticas e booleanas, funções e objetos nativos, estruturas de controle e várias outras definições). Assim como o HTML, o JavaScript exige um navegador da web para ser exibido e navegadores diferentes podem exibi-lo de forma diferente. Diferente do HTML, os resultados de incompatibilidade de navegador com o JavaScript são mais drásticos como: em vez de exibir seu texto incorretamente o script absolutamente pode não executar, exibir uma mensagem de erro ou até derrubar o navegador. O Common Gateway Interface (CGI) é uma especificação que permite aos programas serem executados em um servidor da Web e não uma linguagem de programação, podendo ser escritos em C, Visual Basic ou outras linguagens de programação. Os programas utilizando CGI são muito utilizados na Web, muito provavelmente, se você já digitou uma informação num formulário e pressionou o botão para enviá-las para um site da Web, elas foram enviadas para um aplicativo de CGI. O JavaScript, diferentemente do CGI, é executado no cliente, ou seja, no navegador Web, enquanto o CGI é executado no servidor, sendo esta, a principal desvantagem do CGI 27 frente ao JavaScript pois, como os dados devem ser enviados para o servidor e retornados ao navegador Web, o tempo de resposta pode ser lento. Por outro lado, o CGI pode enviar um arquivo para o servidor, funcionalidade que o JavaScript não suporta, ou seja, o JavaScript apenas manipulas as informações, ele não armazena dados. O JavaScript trata suas estruturas básicas, propriedades do navegador e os elementos de uma página HTML como objetos (entidades com propriedades e comportamentos) e permite que sejam manipulados através de eventos do usuário programáveis, operadores e expressões. Ele oferece também recursos interativos que faltam no HTML e permite a criação de páginas interativas e dinâmicas, que são interpretadas localmente pelo navegador, sem precisar recorrer a execução remota de programas no servidor. 1.5. CSS Cascading Style Sheets (CSS) ou simplesmente folha de estilos, é uma página que contém definições ou especificações de diferentes estilos que são utilizados para definir a apresentação de documentos HTML ou XML. Com base em Gonçalves(2006), o CSS teve seu inicio com Hakon Wium Lie e Bert Bos no ano de 1994. De acordo com Flanagam (2004, p. 272) “A capacidade de criar script com estilos de CSS permite alterar dinamicamente cores, fontes e assim por diante. Acima de tudo, permite configurar e alterar a posição dos elementos e até ocultar e mostrar elementos”. O principal benefício do CSS é prover a separação entre o formato e o conteúdo de um documento, oferecendo ao web designer (pessoa responsável pelo desenvolvimento da camada de apresentação da aplicação) novas ferramentas que dá, segundo Gonçalves(2006) algumas vantagens como: - Reutilização dos estilos, onde define a mesma forma de apresentação de todo o 28 documento HTML ou em apenas parte dele é padronizado; - Etiquetas para a utilização, podendo definir vários estilos para uma mesma etiqueta; - Reutilização do código; - Simplicidade do código HTML, reutilizando os códigos do CSS para tarefas como colocar elementos na página com maior precisão, distância entre as linhas do documento, visibilidade dos elementos, margens, sublinhados, etc.; Porém, essa tecnologia deve ser utilizada com cuidado, pois como ela é relativamente nova, tendo sido lançada oficialmente pelo World Wide Web Consortium (W3C) que é uma entidade responsável pela definição da área gráfica da internet, o CSS1 é a primeira versão e foi lançado oficialmente em 1996 e a segunda versão chamada de CSS2 foi lançada em 1998. Os navegadores modernos garantem a sua utilização, mas alguns navegadores como versões anteriores ao Netscape 4 ou Internet Explorer 3 por exemplo, não suportam a sua utilização ou não implementam as mesmas funções de folhas de estilo, sendo assim, os documentos podem se apresentar de maneiras diferentes dependendo da versão do browser. Figura 06 – Modelo tradicional de aplicação web A Figura 06 mostra o modelo tradicional das aplicações web, onde o navegador do cliente realiza uma requisição via HTTP ao servidor web e este acessa a base dados em busca dos dados requisitados, devolvendo para o navegador um código em HTML com o que o cliente requisitou, juntamente com parametrizações em JavaScript e/ou CSS referentes à página. 29 1.6. HTML HyperText Markup Language ou apenas HTML, significa Linguagem de Marcação de Hipertexto, foi criada em 1990 pelo cientista Tim Berners-Lee. A sua finalidade era apenas tornar possível o acesso e a troca de informações e documentações de pesquisas entre os cientistas de diversas universidades. Segundo Lemay (1998, p. 47), o HTML “se baseia na SGML (Standard Generalized Markup Language), que consiste em um sistema de processamento de documentos bem maior.”. Lemay (1998) cita ainda que para desenvolver páginas em HTML, não é necessário conhecer mais do que uma das principais características da SGML que ela não descreve a estrutura geral do conteúdo do documento e não a apresentação desse documento para o usuário. O HTML devido a sua herança do SGML é uma linguagem de marcação utilizada para a construção de páginas web que inicialmente limitava-se a apenas exibir informações contidas nos documentos, tendo a idéia de que os documentos possuem elementos em comum como, por exemplo, cabeçalhos, títulos, parágrafos, listas e tabelas. Devido ao fato de que os documentos HTML eram apenas para exibir informação, eles são interpretados pelos navegadores, ou seja, os navegadores reproduzem exatamente como eles foram escritos, linha a linha. Devido à constante evolução da Web em geral, a linguagem passou a ter a necessidade de ter uma maior flexibilidade para manipular visualmente os conteúdos e, juntamente com a evolução da linguagem e com a introdução gradativa de novas tags, atributos e aplicações específicas, o HTML tornou-se padrão mundial de apresentação de páginas de conteúdo na Web. 1.7. DHTML A utilização do JavaScript em conjunto com o Cascading Style Sheets (CSS), permite tornar os sites mais interativos para os usuários dando mais movimento, dinamismo e o HTML 30 simples fica conhecido como Dynamic HTML. O Dynamic HTML ou simplesmente DHTML é, de acordo com Gonçalves (2006, p. 04) “a união das tecnologias HTML, JavaScript e a CSS aliada ao Document Object Model (DOM), para permitir que uma página Web seja modificada dinamicamente na própria máquina cliente, sem a necessidade de novos acessos aos servidor Web” que permite que a pagina web seja modificada na máquina que fez a requisição não tendo a necessidade de realizar novos acessos ao servidor web. O DHTML é uma nova tecnologia da web que deixa os elementos de uma página como textos, imagens, posição dos elementos e estilos de páginas mais dinâmicos, ou seja, tudo pode ser mudado dinamicamente. Segundo Lemay (1998), o Dynamic HTML foi projetado para melhorar a capacidade do projetista de controlar a aparência do documento no navegador do usuário, proporcionando um controle preciso em relação ao posicionamento exato de elementos em uma página, ou seja, é graças ao DHTML que hoje é possível desfrutar de interatividades semelhantes às encontradas em sistemas para desktop. Para tornar os sites mais interativos, o DHTML utiliza scripts, embora seja possível a utilização de várias linguagens para escrever os scripts, as mais popularmente utilizadas são JavaScript e o VBscript. 1.8. DOM O Document Object Model (DOM) ou traduzido para o português como Modelo de Objeto de Documentos é, segundo Flanagam (2004, p.240) “é uma interface de programação de aplicativos (API – Applications Programming Interface) para representar um documento (como um documento HTML) e acessar e manipular os vários elementos (como marcas HTML e strings de texto) que compõe esse documento”. De acordo com Gonçalves (2006, p.72), “O DOM é uma plataforma – e uma linguagem 31 – de interface neutra que permitirá programas e scripts acessar dinamicamente e atualizar o conteúdo, estrutura e estilos de documentos”, ou seja, ele é um mecanismo que permite a programação DHTML sendo um modelo de objetos expostos pelo navegador que permite através do Event Model (Modelo de Evento) acessar eventos do usuário e torná-los acessíveis por uma linguagem de script como o JavaScript. O Event Model permite que o documento HTML reaja a ações (eventos) do usuário como, por exemplo, pressionar uma tecla ou arrastar o ponteiro do mouse sobre um elemento. Como os scripts que contém a programação para essas ações são executados no navegador do usuário, existe um grande ganho de desempenho e velocidade com que são executadas as ações. O DOM foi definido pela W3C em cinco categorias de acordo com Gonçalves (2006) que são descritas a seguir: DOM Core – é a especificação de um modelo genérico, onde é possível ver e manipular os documentos em estilo de árvore. DOM HTML – essa especificação é uma extensão do DOM Core, porém com a capacidade de manipular todos os elementos de um documento HTML. Ele utiliza uma sintaxe de programação bem semelhante ao JavaScript. DOM CSS – é a especificação das interfaces necessárias para manipular as regras do CSS. DOM Events – essa especificação adiciona eventos de controle ao DOM que variam desde eventos de interface como cliques de mouse até eventos que são mais específicos, disparados quando é modificada alguma parte da árvore do documento. DOM XML – essa especificação é uma extensão do DOM Core para ser utilizada com XML onde ela capta necessidades particulares do XML. O DOM vê o documento como uma estrutura de dados caracterizados por uma relação 32 de hierarquia entre os elementos que fazem parte dele montando uma estrutura semelhante a uma árvore. Com base em Gonçalves (2006), é possível representar qualquer documento HTML ou XML como uma árvore, sendo necessário apenas que este documento esteja bem formatado. A figura 07 a seguir ilustra a representação em árvore de um documento HTML com suas tags básicas em forma de árvore. Figura 07 – Árvore de um documento HTML simples Como é possível observar na Figura 07, o elemento <HTML> contém os elementos <HEAD> e <BODY>. Apenas o elemento <BODY> contem outros elementos que são <H1> e o <P>. O elemento <H1> contém uma string ‘Texto’, já o elemento <P> contém a string ‘Paragrafo’. 1.9. XML Estimulado pela insatisfação com os formatos existentes (padronizados ou não), o W3C começou a trabalhar em meados da década de 1990 em uma linguagem de marcação que combinasse flexibilidade com a simplicidade da HTML. O principio do projeto era criar uma linguagem que pudesse ser lida por software, e integrar-se com as demais linguagens. 33 Segundo Gonçalves (2006, p. 127) “XML significa eXtensible Markup Language (Linguagem Extensível de Marcação) e tem como característica sua semelhança em tags e atributos com o HTML”. O XML é considerado uma grande evolução das linguagens para a Web que teve como base a General Markup Language (GML), desenvolvida pela IBM nos anos 70. XML é uma linguagem que foi desenvolvida para superar as limitações do HTML, sendo definida como o formato universal para dados estruturados na Web, consistindo em tabelas, desenhos, parâmetros de configurações, entre outros, ou seja, a linguagem define as regras que permitem escrever documentos de forma que sejam adequadamente visíveis ao computador, não tratando da apresentação das informações, mas apenas do conteúdo a ser apresentado, tendo assim um papel importante na globalização e na compatibilidade entre os sistemas, pois, o seu propósito principal é a facilidade de compartilhamento de informações com segurança, confiabilidade e facilidade através da Internet. O XML é um formato para a criação de documentos com dados organizados de forma hierárquica, como se pode ver freqüentemente em documentos de texto formatados, imagens vetoriais (imagem gerada a partir de descrições geométricas de formas, diferente das imagens chamadas mapa de bits, que são geradas a partir de pontos minúsculos diferenciados por suas cores) ou bancos de dados (são conjuntos de dados com uma estrutura regular que organizam informação). Como se trata de um formato texto-puro, XML pode ser criado e editado em qualquer dos mais recentes editores de textos. Conhecendo-se a sintaxe de XML, é possível escrever documentos "na mão" tão válidos quanto os gerados por programas automatizados. A extensibilidade do XML é tanta, que muitas corporações vêm adicionando funções XML em seus produtos, como a Microsoft, Oracle, IBM, Google e Sun. É uma linguagem que tende a alcançar um sucesso cada vez maior, não só no segmento de comércio eletrônico, como vem acontecendo, mas em praticamente todas as áreas da Web. 34 O XML é basicamente um formato de texto unicode bastante simples que representa dados de forma semi-estruturados que podem ser considerados como uma combinação de texto e estrutura que no caso da XML é fornecida pelas tags que carregam o valor e outras informações que descrevem o dado tornando um documento auto-explicativo. 1.10. WEB 2.0 O termo Web 2.0 faz referência a uma nova fase da Web que dá ênfase a ferramentas e plataformas que permitam ao usuário não ser apenas um receptor de informações, mas também um produtor delas. Porém, este termo tem gerado muita discussão, pois alguns defendem que esta atual fase da Web é uma evolução, o que não utilizaria o termo Web 2.0 e os que defendem que esta nova fase é uma inovação e que por isso defendem o termo Web 2.0. Como cita Tim O’Reilly (2005): “Web 2.0 é a mudança para uma internet como plataforma, e um entendimento das regras para obter sucesso nesta nova plataforma. Entre outras, a regra mais importante é desenvolver aplicativos que aproveitem os efeitos de rede para se tornarem melhores quanto mais são usados pelas pessoas, aproveitando a inteligência coletiva”. Para a realização deste trabalho, foi seguida a linha de raciocínio de Tim O`Reilly, que foi quem iniciou o pensamento da Web 2.0 que se diferencia do modelo anterior (Web 1.0) com seus sites estáticos e com conteúdo pré-programado para aparecer pro usuário. Atualmente alguns fatores contribuem para o avanço e melhorias da Web 2.0, tais como: o aumento de pessoas usando a internet devido a popularização da banda larga e a popularização de tecnologias que possibilitam os sites serem desenvolvidos implementando as características da Web 2.0 citadas abaixo: 35 • Participação: mais pessoas utilizando a internet e com liberdade para alterar o conteúdo, gerando uma Inteligência Coletiva (exemplo: Wikipedia); • Cooperação: não existência do controle dos dados dos sites por meio de pessoas responsáveis pelo seu desenvolvimento, possibilitando assim a utilização e constante melhoria dos serviços já criados (exemplo: Google Maps); • Usabilidade: facilitação no uso, tornando os sites mais intuitivos, onde os testes são realizados com grande freqüência e com uma grande quantidade de usuários. • Confiança no conteúdo: os usuários estão constantemente avaliando, corrigindo e sugerindo, assim, as informações erradas são rapidamente denunciadas; • Experiência rica para o usuário: as páginas estão cada vez mais leves, rápidas e interativas, ficando cada vez mais com seu formato próximo aos aplicativos para Desktop; • Personalização: os usuários têm a possibilidade de escolher o próprio conteúdo; Além das características citadas acima, são necessários também alguns elementos cruciais para que um site seja considerado integrante da família Web 2.0, sendo eles: • Usuário: principal objetivo dos sites, sendo eles os responsáveis por criar, avaliar, editar, organizar, compartilhar e escolhendo como e o que deseja ver; • Conteúdo: a preocupação nessa nova versão da Web não está mais em publicar o conteúdo, mas sim em criar alternativas que ajudem a selecioná-lo, organizá-lo e distribuí-lo; • Organização: utilização da Folksonomia, que é a criação de tags pelo usuário para que ele possa definir qual a categoria de um determinado site (exemplo http://del.icio.us); • Avaliação: denuncia de erros e abusos, com um estímulo à avaliação; • Distribuição: disponibilização do conteúdo por meio do bom uso de vários dispositivos; 36 • Designer: estimular o usuário a fazer parte da web permitindo autonomia, facilidade e simplicidade na busca por informação e colaboração para o desenvolvimento desta; Com essas características e elementos citados acima, os sites que fazem parte da família Web 2.0, permitem aos seus desenvolvedores construir novos serviços em cima de serviços disponibilizados por sites já existentes, sendo construídos e disponibilizados em cima de arquiteturas de Web Services, transformando as aplicações em provedores de serviços e a web em plataforma para estes serviços. Para isso, os desenvolvedores devem seguir algumas tendências como: layout simples, projeção do conteúdo e não da página, utilização de espaços em branco, textos grandes com cores fortes e contrastantes. Figura 08 – Conceitos da Web 2.0 A Figura 08 fez um resumo do que é necessário para se ter um site dentro dos padrões da Web 2.0 mostrando as tecnologias que a implementam, os serviços disponibilizados, o modelo utilizado pela Web 2.0 e a Filosofia na qual se baseiam os conceitos da Web 2.0. O`Reilly (2005) diz ainda que “Pode-se ter certeza de que, se um site ou produto depende de publicidade para se tornar conhecido, não é Web 2.0”. 37 2. AJAX AJAX significa Asynchronous Javascript And XML e segundo Gonçalves (2006), o termo AJAX foi lançado por Jesse James Garrett em um artigo on-line publicado em fevereiro de 2005 e pode ser lido na íntegra em http://www.adaptivepath.com/publications/essays/archives/000385.php. A técnica do AJAX consiste em utilizar tecnologias incorporadas que tem como as principais o JavaScript e o XML. A utilização em conjunto dessas tecnologias, torna possível a criação de páginas que executam códigos e os apresentam para o usuário sem a necessidade de recarregar a página por completo. 2.1. Conceitos AJAX é o uso de tecnologias como Javascript e XML fazendo com que o navegador carregue conteúdo do servidor sem recarregar a página atual, o que torna o navegador mais interativo, transformando as páginas semelhantes às aplicações Desktop. AJAX não é uma tecnologia, são algumas tecnologias trabalhando juntas, onde cada uma faz a sua parte, não sendo somente um novo modelo, é também uma iniciativa na construção de aplicações web mais dinâmicas e criativas oferecendo assim, novas funcionalidades. O modelo clássico de aplicação web trabalha de forma que a maioria das ações do usuário na interface dispara uma solicitação para o servidor web, o servidor realiza o processamento recuperando dados, realizando cálculos, conversando com outros sistemas e então retorna a solicitação para o usuário. Enquanto o servidor está fazendo seu trabalho, o usuário está esperando, e a cada etapa em uma tarefa, o usuário aguarda mais uma vez. Com base em Gonçalves (2006), a idéia do AJAX é tornar esse processamento do servidor mais simples, ou seja, se o usuário já está com a página carregada, ele carrega apenas os conteúdos solicitados, 38 reduzindo o tempo de processamento do servidor e o tráfego na rede. De acordo com esse conceito, Gonçalves (2006, p. 5), “O AJAX contém um mecanismo que na realidade é um conjunto de funções escritas em JavaScript que são chamadas sempre que uma informação precisa ser pedida ou enviada ao servidor.”. Sendo assim, a maior vantagem das aplicações AJAX é que elas rodam no próprio navegador então, para estar hábil a executar aplicações com AJAX, é necessário apenas possuir algum dos navegadores modernos que já oferecem suporte às tecnologias utilizadas pelo AJAX, sendo os mais populares o Mozilla Firefox, Internet Explorer, Opera, Konqueror e Safari. 2.2. Aplicações O principal problema resolvido com AJAX é a substituição da conhecida tela escondida que era implementado como única solução para a realização de requisições ao banco, submissão de formulários, validações, enfim tudo que fosse necessário para não realizar um refresh da página sem recarregar toda a página atual. A utilização do hidden frame apresentava alguns problemas como: · Páginas com vários quadros; · Quando ocorriam erros na página escondida, estes não eram rastreados com facilidade; · Dificuldade de manutenção; · O desenvolvedor, ao ver uma já implementada, tinha bastante receio em adicionar ou modificar alguma funcionalidade dela, pois poderiam ocorrer erros em outros locais; · Não se tinha um local que centralizasse e controlasse todas as requisições; AJAX resolve este problema, possibilitando, através de um único método, realizar request e receber responses com ilimitadas respostas, ou seja, a comunicação cliente-servidor fica 39 transparente, fazendo com que sem nenhuma dificuldade o desenvolvedor possa acessar métodos do servidor quase como se fosse um método JavaScript. - Validação em tempo real: São validações que não podem ser feitas no navegador do cliente, pois dependem de informações que estão no servidor, como, por exemplo, verificar se um usuário já está cadastrado ou se a data informada é anterior à data atual; - Auto Complete: permite que ao mesmo tempo em que o usuário for digitando, uma lista de possíveis respostas é apresentada para que o usuário possa escolher alguma resposta. Como exemplo, existe Google Suggest (http://www.google.com/webhp?complete=1&hl=en); - Atualização apenas da informação solicitada: permite carregar apenas as informações solicitadas pelo usuário, ao invés de carregar todos os dados na tela novamente ou então necessitar de janelas auxiliares podendo montar a lista de “itens-pai” e dependendo da escolha, montar os detalhes do item. Esse tipo de atualização permite o desenvolvimento de chats (http://www.qwadchat.com), notícias (http://digg.com/spy) ou aplicações que tem a necessidade de serem atualizadas constantemente; - Interface de usuário sofisticada: são controles dinâmicos como árvore de diretórios, menus, barras de progresso, apresentando uma interface rica semelhante às aplicações desktop ou implementar jogos sem necessidade de refresh. Um exemplo de interface rica pode ser visualizado no site Flickr (http://flickr.com/), onde o usuário pode organizar uma coleção de fotos com diversos recursos, como por exemplo, com utilização de drag n´ drop; 2.3. Estado da Arte AJAX não é exatamente uma tecnologia, mas um termo que define uma nova abordagem um conjunto de tecnologias existentes para formar uma ferramenta de criação de 40 aplicações web onde, segundo Gonçalves (2006), o AJAX é composto pelas seguintes tecnologias: • Apresentação visual baseada nos padrões HTML/XHTML e CSS; • Exposição e interação dinâmica com o usuário através do DOM; • Intercâmbio e manipulação de dados utilizando XML; • Recuperação de dados de forma assíncrona com XMLHttpRequest; • JavaScript responsável por unir as tecnologias acima do lado do usuário; Combinando estas tecnologias as aplicações web são capazes de fazer atualizações incrementais e rápidas na interface do utilizador sem ser preciso recarregar novamente toda a página. Com isto, se obtém uma maior velocidade nas respostas às ações do usuário, pois não é preciso recarregar informações que não serão atualizadas, assim podendo criar aplicações web mais parecidas com aplicações desktop. 2.4. Tecnologias Utilizadas pelo AJAX Como se pode ver na Figura 09, o AJAX é uma combinação de várias tecnologias que foram apresentadas nos capítulos anteriores como JavaScript, CSS, DHTML e XML. Além das tecnologias já apresentadas, o AJAX faz uso também de outras tecnologias que serão mais bem apresentadas a seguir, como o XMLHttp e XMLHttpRequest. 41 Figura 09 – Tecnologias utilizadas pelo AJAX A Figura 09 expõe bem como são integradas as tecnologias para a utilização dos recursos da metodologia AJAX onde são utilizados os conceitos de cada uma das tecnologias e que no conjunto, forma o AJAX. 2.5. AJAX Frameworks Para facilitar o desenvolvimento de aplicações Web, pode-se utilizar um Framework, que irá agilizar, descomplicar e padronizar as aplicações Web. A grande vantagem dos frameworks é que eles geram o código pronto de muitas operações básicas e com isso os desenvolvedores de aplicações Web ficam com mais tempo disponível para implementar as tarefas mais difíceis dos sites, pois das mais comuns, os frameworks já se encarregam. Entre as tarefas que os frameworks implementam estão os recursos em AJAX, como a utilização do objeto XMLHttpRequest. Com isso, é possível que boa parte da implementação 42 necessária para que os módulos interajam com o envio de solicitações entre o cliente e o servidor possa ser implementada e gerenciada pelos frameworks. Existem dezenas de frameworks para AJAX. Abaixo estão selecionados alguns dos Frameworks Web que implementam os recursos do AJAX: AJAXLIB É uma classe escrita em JavaScript e que pode ser utilizada em conjunto com várias linguagens, como PHP, PERL e JSP. É uma ferramenta simples e indicada para aplicações que não requerem muitos recursos. Esse produto possui código aberto. (AJAXLIB, 2007) ASP.NET AJAX É um framework da Microsoft que vem integrado ao ASP.NET. Com uma biblioteca que contém vários componentes prontos, ele permite facilmente incorporar no site funções de dragand-drop, menus dinâmicos, popup com informações temporárias (Exemplo: calendário), controle de painéis na página, blocos sempre visíveis mesmo com rolagem da página, controle de campos drop-down em cascata (alterando um campo atualiza os demais), controle de animações, etc. No site do produto, é possível ver todos os componentes disponíveis para o ASP.NET AJAX e exemplos interessantes para sua utilização. (ATLAS, 2007) DOJO O Dojo é um toolkit DHTML escrito em Javascript e independente de plataforma. Seu foco está no desempenho, por isso é recomendado se o uso de JavaScript for intenso. Possui uma API complexa e sua documentação não é muito completa. É um dos frameworks mais antigos, seu desenvolvimento foi iniciado em setembro de 2004 e hoje é considerado um dos produtos mais maduros. Um recurso que diferencia o Dojo é seu suporte aos botões Voltar e Avançar, possibilitando registrar um método de retorno de chamada que será acionado se o usuário clicar no botão Voltar ou Avançar. Esse produto possui código aberto (DOJO, 2007). 43 DWR O Direct Web Remoting (DWR) é um framework Java para rodar aplicações AJAX. DWR é um dos mais conceituados frameworks AJAX disponíveis para a plataforma Java. Tudo funciona de maneira simples e é de fácil aprendizado. A estrutura do código fonte Java fica acessível ao cliente via JavaScript, não existindo uma distinção entre lado cliente e servidor do ponto de vista do desenvolvedor. Tudo é feito de forma transparente, pois o DWR cuida de todo processo de criação e manipulação do XMLHttpRequest. Esse produto possui código aberto (DWR, 2007). ECHO2 Echo2 é um framework desenvolvido em Java que cria a interface baseada em templates HTML, não necessitando que o desenvolvedor saiba HTML ou JavaScript, apenas tenha conhecimento em Java. O desenvolvimento fica muito parecido com o feito utilizando o Swing. Esse produto possui código aberto (ECHO2, 2007). GWT Com o Google Web Toolkit (GWT), é possível transformar uma aplicação feita em Java em aplicações Web com AJAX integrado ao HTML, CSS e JavaScript. A aplicação já fica pronta para rodar em qualquer navegador da maneira mais leve possível. Além disso, o GWT oferece bibliotecas prontas para que qualquer um possa colocar os recursos de AJAX facilmente em seu site sem precisar maiores conhecimentos de programação. O GWT foi utilizado pela Google para desenvolver os sites Google Maps e Gmail. Pode ser integrado com qualquer IDE Java. Existem versões do GWT para Linux e Windows (GWT, 2007). 44 MOCHIKIT O Mochikit extrai algumas funcionalidades do Python para sua API. A biblioteca também é distribuída com a versão do framework do Python para Web, chamada de TurboGears. O código do Mochikit é muito limpo e fácil de utilizar. Sua estrutura de log é muito boa (MOCHIKIT, 2007). PROTOTYPE O Prototype Implementa um conjunto inteiro de efeitos visuais, assim como o drag-anddrop e alguns componentes de interface com o usuário. O suporte ao AJAX é razoavelmente direto e bem desenvolvido, uma vez que foi desenvolvido para Ruby on Rails. O Prototype é um dos framework mais utilizado. O que contribui para isso é a facilidade de uso de suas funções e sua documentação bem detalhada. Seu código é todo escrito em JavaScript. Esse produto possui código aberto (PROTOTYPE, 2007). SAJAX O SAJAX (Simple AJAX Toolkit) é um framework para AJAX com implementações do lado do servidor. Possui implementações para PHP, ASP, ColdFusion, Perl, Python, Ruby entre outros. Esse produto possui código aberto. (SAJAX, 2007) SYMFONY É um Framework desenvolvido em PHP e traz como características a geração de código tableless e opção de internacionalização. Utiliza o modelo MVC para separação do código gerado. Esse produto possui código aberto (SYMFONY, 2007). XAJAX XAJAX é uma biblioteca de funções em PHP para facilitar o uso de AJAX. São bibliotecas desenvolvidas como software livre. Os Frameworks SAJAX e XAJAX possuem uma diferença básica, enquanto no SAJAX o retorno é tratado em uma função JavaScript, no XAJAX 45 o retorno é feito em uma função do PHP, assim como os comandos e eventos adicionados são feitos no PHP, resguardando o código JavaScript. O XAJAX também tem a vantagem de funcionar muito bem nos três principais navegadores: Internet Explorer, Firefox e Opera (XAJAX, 2007). XOAD É um framework desenvolvido em PHP e baseado nos recursos do AJAX. Tem como característica principal ser orientado a objetos. Utiliza JSON e objetos PHP para fazer a comunicação entre cliente e servidor. Possui uma documentação bem completa, descrevendo todas as suas classes, métodos e variáveis. No site oficial, podem ser encontrados vários exemplos de utilizam deste framework. Esse produto possui código aberto (XOAD, 2007). Yahoo! UI A biblioteca Yahoo! UI (YUI) foi desenvolvida pelo Yahoo! para desenvolvimento dos seus sites e teve seu código aberto junto com uma gama de recursos excelentes para desenvolvedores. O YUI é mais uma coleção distinta de "utilidades" do que uma biblioteca, com cinco scripts principais que tratam de: animação, AJAX, manipulação DOM, drag-and-drop, tratamento de eventos. Existem seis controles, chamados de: Calendar, Slider, Menu, AutoComplete, TreeView, Container classes (com o qual é possível executar janelas no estilo de widgets). Todos esses controles possuem exemplos no site do Yahoo para serem baixados. É um framework voltado para aplicações menores, pois não possui muitos recursos (DEVELOPER, 2007). 2.6. XMLHttp Segundo cita Gonçalves (2006), o XMLHttp foi desenvolvido pela Microsoft em 2001 46 como um objeto ActiveX (objetos de programação proprietários da Microsoft) lançado junto com a biblioteca que suportava o XML para o navegador Internet Explorer, o objeto XMLHttp foi incluído com a intenção de nada além de manipular objetos XML. Com a propriedade de manipular objetos XML através de um objeto trabalhando em conjunto com o JavaScript, tornouse possível realizar buscas no servidor ser ter a necessidade de recarregar a página. Como o XMLHttp é um objeto ActiveX proprietário da Microsoft, outros navegadores não conseguiam utilizá-lo nativamente. Ao invés do Mozilla permitir acesso aos objetos ActiveX, eles desenvolveram o seu próprio objeto que segundo Gonçalves (2006, p. 5) “ [...] reproduziram os métodos principais do objeto e propriedades em um objectXMLHttpRequest do seu browser nativo” possibilitando que esse objeto se tornasse portável para outros sistemas operacionais. 2.7. XMLHttpRequest XMLHttpRequest é biblioteca permite que requisições HTTP sejam feitas via GET ou POST sem que haja a necessidade de um refresh na página. E o resultado pode ser obtido como texto simples (objetoXMLHttpRequest.responseText) ou como objeto DOM que retorna em formato de XML (objetoXMLHttpRequest.responseXML). Segundo Gonçalves (2006), requisições realizadas no servidor de aplicação web para trazer dados via método GET, são requisições feitas através da URL como, por exemplo: cadastroUsuario.aspx/?id_usuario=4, como é possível verificar na URL de exemplo, inicialmente está o nome do programa a ser utilizado, seguida por um caractere de interrogação “?”, o nome da variável, um sinal de igual que indica a atribuição de valor para a variável e o valor a ser atribuído na variável. As requisições via método POST são, de acordo com Gonçalves (2006, p.107), “[...] 47 muito similar ao pedido via GET, mas se diferencia pela quantidade de que podem ser transmitidas por essa forma”, porém, utilizado para o envio de dados ao servidor. Um exemplo pode ser visto da seguinte forma: buscaUsuario.aspx/?id_usuario=4&nome=Jose. Como se pode notar existe o caractere especial & “e-comercial” que é o separador padrão para o envio de mais de uma variável. Existem algumas outras propriedades existentes no objeto XMLHttpRequest que serão apresentados nos exemplos a seguir. São eles: open, send, onreadstatechange, readState, setHeader, getResponseHeader, getAllResponseHeaders e abort. Segundo Gonçalves (2006), o método open inicia a comunicação com o servidor, o método setHeader define o nome da propriedade e o seu valor para o envio do cabeçalho do documento. O método getResponseHeader retorna o valor de uma propriedade em específico do cabeçalho, existem ainda o método getAllResponseHeaders que retorna não apenas uma propriedade conforme o método getResponseHeader, mas todas as propriedades existentes no cabeçalho. Por fim, existe o método abort, que serve para interromper a requisição atual. 2.8. Funcionamento Para capturar respostas de páginas dinâmicas, o AJAX utiliza os métodos responseText e responseXML. Com base em Gonçalves (2006), utilizando a tecnologia JavaScript inserido na página HTML, o navegador do cliente realiza uma chamada assíncrona por um objeto XMLHttpRequest que pode retornar ao servidor web para buscar documentos XML. Após obter este documento XML, se utiliza JavaScript para atualizar o DOM (modelo de objeto) da pagina. Com isto o usuário obtém a atualização da página sem precisar recarregá-la totalmente. 48 2.9. Exemplos Será apresentada a estrutura básica de um código em AJAX, começando com a inicialização do componente até a apresentação na tela do usuário baseados em Gonçalves (2006). Para iniciar um código em AJAX, é necessário instanciar o objeto XMLHttpRequest, conforme é demonstrado na Listagem 01. Após o objeto ter sido instanciado, o próximo passo é iniciar a comunicação com o servidor, sendo nesta fase que se é utilizado o método OPEN do objeto criado permitindo abrir um documento, passar argumentos e receber uma resposta. objXMLHttpRequest = new XMLHttpRequest(); objXMLHttpRequest.open(“GET”,”/informacoes.xml”) ; Listagem 01 – Instanciando um objeto e utilizando método OPEN Analisando o código da Listagem 01, é possível perceber na segunda linha que a página ‘informacoes.xml’ está sendo aberta no segundo par6ametro por meio do método GET passado no primeiro parâmetro da segunda linha, sendo esses dois parâmetros obrigatórios. É possível também utilizar o método POST nesse momento, porém ele é mais utilizado quando existem muitos parâmetros a serem passados à próxima página. É possível ainda, passar outros três parâmetros opcionais definindo assim o tipo de sincronização (síncrona ou assíncrona) e o nome de usuário e senha, caso a intenção seja acessar uma página protegida. Nesse momento é acionado o método SEND que envia de fato os dados ativando a conexão e fazendo a requisição de informações ao documento aberto pelo método OPEN, aceitando apenas um único argumento, que é uma string para o envio. Caso não haja um envio, é necessário que seja passado o valor null que é o mesmo que passar um valor em branco como pode ser visto na Listagem 02. 49 objXMLHttpRequest.send(NULL); Listagem 02 – Utilizando método SEND Neste momento, já se tem pronto o processo de comunicação restando apenas receber o retorno das informações, que podem ser efetuados pelas propriedades responseText e responseXML. Como visto anteriormente, a propriedade responseText recebe o retorno de informações no modo de um texto, enquanto que a propriedade responseXML retorna um objeto DOM para que posteriormente possam ser trabalhadas estas informações. Este retorno das informações pode ser visto na Listagem 03. resposta = objXMLHttpRequest.responseXML; Listagem 03 – Retorno XML Até o momento, foi apresentada a sequência padrão para a utilização do AJAX, porém, como a comunicação é feita de forma assíncrona, ou seja, os dados não necessariamente são carregados ao mesmo tempo em que a página web é apresentada, é necessário verificar em que momento os dados requisitados estão prontos para serem mostrados na tela do usuário. Para essa verificação, é utilizada a propriedade onreadstatechange que permite atribuir uma função que é chamada de acordo com a mudança de estado do documento. Esta atribuição de função pode ser vista na Listagem 04. objXMLHttpRequest.onreadstatechange = processadorMudancaEstado; Listagem 04 – Atribuir Função Conforme Listagem 04 mostra, a função “processadorMudancaEstado” será chamada sempre que houver uma mudança no estado do documento que é verificada através da propriedade readState do objeto XMLHttpRequest. De acordo com Gonçalves(2006), a propriedade readState possui os seguintes valores: 50 0 – Não iniciado: O Objeto foi criado, mas o método Open() ainda não foi chamado; 1 – Carregando: O método open() foi chamado mas o pedido ainda não foi enviado; 2 – Carregado: O pedido foi enviado; 3 – Interativo: Uma parte da resposta foi recebida; 4 – Completado: Todos os dados foram recebidos e a conexão está fechada; Segundo Gonçalves (2006, p. 117), “Toda vez que a propriedade do readState muda de um valor para outro, o evento de readstatechange dispara e o manipulador de evento onreadstatechange é chamado”, executando a função atribuída na Listagem 04. Com estes valores, é possível verificar cada iteração que ocorre no documento, mas o valor mais utilizado é o 4, quando o processo está completado, pois neste momento se pode saber se a comunicação foi realizada, como pode ser visto na Listagem 05. estadoObj = objXMLHttpRequest.readState; Listagem 05 – Verificando Estado Porém, se faz necessário ainda se assegurar que o resultado da resposta é 200, pois mesmo recebendo um retorno de documento completado, não é possível ter a certeza que este retorno é o esperado ou não, pois, a propriedade status informa, dentre outros códigos, o 404 e o 200, que significam respectivamente, “Documento Não Encontrado” e “OK”. A Listagem 06 mostra um exemplo na de como é utilizada esta propriedade. estadoServidor = objXMLHttpRequest.status; Listagem 06 – Resposta do Servidor Com os exemplos apresentados até o momento, já é possível abrir uma conexão com o servidor, enviar parâmetros para processamento, receber o retorno das informações fornecidas pelo servidor e saber qual o momento certo para mostrar o retorno para o usuário. O próximo passo é mostrar as informações no navegador do usuário que está acessando a página. Esse 51 processo pode ser realizado por meio da propriedade innerHTML do JavaScript conforme pode ser observado na Listagem 07. document.getElementById(‘div_conteudo’).innerHTML = objXMLHttpRequest.responseText; Listagem 07 – Impressão no Navegador Neste momento foram apresentados todos os elementos básicos, mas completos para processar um programa AJAX. Juntando todos os exemplos citados anteriormente, a Listagem 08 mostra como ficaria um programa completo para utilizar o AJAX. var objXMLHttpRequest = null; function pegaConteudo() { try { objXMLHttpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { objXMLHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { objXMLHttpRequest = false; } } if (!objXMLHttpRequest && typeof XMLHttpRequest != 'undefined' ) { try { objXMLHttpRequest = new XMLHttpRequest(); } catch (e) { objXMLHttpRequest = false ; } } if (objXMLHttpRequest) { objXMLHttpRequest.onreadystatechange = processadorMudancaEstado; objXMLHttpRequest.open("GET", "/dados.html"); objXMLHttpRequest.setRequestHeader('Content-Type','text/xml'); objXMLHttpRequest.setRequestHeader('encoding','ISO-8859-1'); objXMLHttpRequest.send(null); } } (…) 52 (…) function processadorMudancaEstado () { if (objXMLHttpRequest.readyState == 4) { // Completo if (objXMLHttpRequest.status == 200) { // resposta do servidor OK document.getElementById ( "div_conteudo"). innerHTML = objXMLHttpRequest.responseText ; } else { alert( "Problema: " + objXMLHttpRequest.statusText ); } } } } Listagem 08 – Exemplo completo de AJAX No exemplo apresentado na Listagem 08, é possível observar que foram utilizados todos os objetos do XMLHttpRequest citados no início do tópico. 2.10. Limitações Do mesmo modo que o uso do AJAX tem muitos benefícios conforme citado anteriormente, ele também tem algumas desvantagens. Um dos problemas no uso de AJAX que pode ser facilmente verificado é a questão de a navegação do usuário não fica no histórico do navegador, com isso, se o mesmo desejar usar o botão voltar do navegador, poderá não ter o resultado esperado. Conforme cita Asleson 2006: [...] diferentemente dos IFRAMES e quadros ocultos, fazer uma solicitação através do XMLHttpRequest não alterará a pilha do histórico de seu navegador. Em muitos casos, isso não importará (quantas vezes você clicou em Voltar só para descobrir que nada mudou?), mas se seus usuários estiverem esperando que o botão Voltar funcione, você terá alguns problemas. Outra desvantagem encontrada é de não ser modificada a barra de endereço, desta forma, fica mais complicada a tarefa de colocar um botão do tipo, ‘Recomende esta notícia’, ou ainda, salvar nos favoritos um conteúdo do site visitado. Existe ainda uma desvantagem no uso do AJAX que está diretamente ligada na utilização do JavaScript. 53 Segundo Asleson 2006: É importante não se exceder com o AJAX. Lembre-se que o código JavaScript está sendo executado no navegador de seu cliente e ter milhares de linhas de JavaScript pode tornar muito lenta as experiências de seus usuários. Scripts malcodificados podem sair rapidamente de controle, principalmente conforme o volume aumentar. Neste caso, o que principalmente acontece é que, como você cria vários códigos JavaScript para validações, atualizações, etc., estes códigos vão todos para o navegador do usuário, e se este JavaScript for muito grande, o tempo de transferência de todo este código, pode se tornar um problema. Outra questão que pode gerar confusões é de o usuário não estar preparado ou familiarizado com AJAX, ou seja, estar esperando por uma reação do navegador enquanto acontece outra. No caso de uma mudança de página, o usuário pode estar esperando que toda a página faça o refresh e, com o AJAX, somente o conteúdo necessário altera. Desta forma, pode acontecer de o usuário não perceber que o conteúdo já alterou e ficar aguardando muito para continuar sua navegação. Para que esse tipo de situação não aconteça, é necessário fazer alguma ação para que o usuário perceba que algo mudou, como por exemplo, no caso do Gmail do Google, onde para cada mudança de página, ele apresenta a mensagem “Carregando...”. Isto faz com que o usuário saiba quando a página está sendo alterada em seu navegador. 54 3. ESTUDO DE CASO Para o estudo de caso foi desenvolvida uma aplicação utilizando a infra-estrutura fornecida pelas extensões AJAX 1.0 da Microsoft ao ASP.NET 2.0. Esta aplicação faz acesso ao banco de dados SQL Server é utilizada a IDE de desenvolvimento Visual Studio 2005 juntamente com a biblioteca ASP.NET AJAX 2.0, para a visualização será utilizado o navegador Firefox. Depois de instaladas as ferramentas citadas anteriormente, é possível verificar todas dos componentes de bibliotecas das classes .NET que oferecem suporte do lado do servidor e os arquivos JavaScript que dão suporte do lado do cliente do ASP.NET 2.0 AJAX Extencions 1.0 que por padrão estão em “C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extencions\v1.0.61025”. No Visual Studio é incluída no Toolbox apresentada quando escolhida para desenvolvimento, um projeto de Web Site a nova aba AJAX Extencions que contém componentes utilizados para o desenvolvimento de aplicações com AJAX. Este estudo de caso mostrará a facilidade que um framework fornece para adicionar algumas funcionalidades AJAX em uma aplicação ASP.NET 2.0. Criando a nova aplicação Web Para iniciar com a aplicação, deve-se abrir o Visual Studio e selecionar um novo projeto escolhendo New Web Site. Na caixa de diálogo, deve ser escolhida a opção ASP.NET AJAX Enabled Web Site e a linguagem Visual C#. Construindo a interface Para o desenvolvimento da interface da aplicação, um arquivo CSS será criado para padronizar o posicionamento e a formatação dos elementos utilizando a técnica Tableless Layout 55 que é a utilização de tabelas para ajudar no posicionamento dos elementos. Abaixo pode ser vista a Listagem 09 que contém todo o código correspondente à interface da aplicação Web que deve estar inserido na página Default.aspx. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"%> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Aplicações Web com AJAX</title> </head> <body> 56 <asp:GridView ID="GridViewUsuarios" CssClass="info" runat="server"> <Columns> <asp:BoundField DataField="Codigo" HeaderText="C&#243;digo"> <ItemStyle HorizontalAlign="Center" /> </asp:BoundField> <asp:BoundField DataField="nome" HeaderText="Nome"> <ItemStyle HorizontalAlign="Center" /> </asp:BoundField> <asp:BoundField DataField="rua" HeaderText="Rua"> <ItemStyle HorizontalAlign="Center" /> </asp:BoundField> Listagem 09 – Código da página Default.aspx É possível verificar no código que ele faz referências a pseudo-classes que serão definidas do documento CSS mais adiante. A Figura 10 mostra como é a apresentação da página Default.aspx no navegador Firefox sem a aplicação do arquivo de CSS. 57 Figura 10 – Apresentação da página Default.aspx sem CSS Para definir um arquivo CSS com os padrões de formatação e posicionamento como disposto anteriormente, dentro do Visual Studio, na janela onde fica definida a estrutura do projeto, a Solution Explorer deve-se clickar com o botão direito e selecionar a opção Add ASP.NET Folder e o subitem Theme. Será criada uma pasta com o nome Theme que servirá para definir um padrão, deve ser modificada para “Padrao” e nesta pasta deverá ser configurado o padrão para a aplicação. Para adicionar uma folha de estilos, deve ser adicionado um novo Web Site e ser renomeado para “Estilos.css”. Dentro de Estilos.css deve ser adicionado o código que consta na Listagem 10. 58 body, select { background-color:White; font-family: Verdana, Arial, Helvetica, Sans-Serif; font-size: 9pt; } select { border: solid 1px #00460A; } 59 table.dados { border: solid 1px #00460A; border-collapse: collapse; width: 100%; } table.dados tr th . table.dados tr td { border: solid 1px #00460A; padding: 3px; } table.dados tr th { border: solid 1px #00460A; color: White; } table.dados tr.alt. td { background-color: #B7D5AB; } Listagem 10 – Código CSS Mesmo depois de criado o arquivo CSS com o código acima, se a aplicação for executada, os padrões definidos no CSS não serão apresentados. Isso ocorre porque a folha de estilos ainda não foi vinculada com a página Default.aspx, para que esses padrões sejam utilizados pela aplicação, deve ser inserido dentro da diretiva @Page da página Default.aspx o atributo StylessheetTheme que é o atributo responsável pelo vínculo da folha de estilos CSS com a página Default.asp, ficando semelhante à Listagem 11. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" StylesheetTheme="Padrao"%> Listagem 11 – Código da diretiva @Page A Figura 11 mostra como vai ficar a página dinâmica Default.aspx depois de aplicada a folha de estilo Estilos.css. 60 Figura 11 – Apresentação da página Default.aspx com CSS Desenvolvendo as funcionalidades em AJAX Serão apresentadas as funcionalidades de acesso a banco de dados para preencher com dados do banco de dados os objetos incluídos na página. Para isso, serão utilizados os assistentes disponibilizados pelo Visual Studio, não havendo a necessidade de escrever uma única linha de código. Para carregar o DropDownListGrupos com os Grupos de usuários que existem na base de dados, deve-se clicar no Smart tag do DropDownListGrupos e marcar a opção Enable AutoPostBack. Feito isso, para abrir o assistente para conectar no banco de dado, deve-se clicar em Choose Data Source que aparecerá a janela Configuration Wizard. Na lista Select a data source, escolhendo a opção New data source, aparecerá a tela Choose a Data Source Type. Deve- 61 se escolher a opção Database e digitar “SqlDataSourceGrupos”, depois deve-se clickar em OK. Será apresentada a tela Choose Your Data Source Connection, deve-se clickar em New Connection. Nesse momento, surgirá a janela Add Connection é necessário colocar as informações para estabelecer uma conexão com o banco de dados. Para essa aplicação foi desenvolvido o banco de dados “Usuarios” no SQL Server 2005 com apenas duas tabelas, sendo uma para armazenamento dos grupos de usuários e a outra para o armazenamento do cadastro dos usuários como está apresentado na Figura 12. Figura 12 – Tabelas do Banco de Dados As informações para a conexão com o banco de dados devem ser informadas e acertadas até que apareça a mensagem Teste connection succeeded ao clickar no botão Test Connection. Após isso aparecerá uma mensagem perguntando se aceita salvar a string de conexão no arquivo Web.config, é necessário confirmar e clickar em Next. A tela de Configure the Select Statement, deve-se escolher a opção Specify a custom SQL statement os stored procedure e clickar em Next. A próxima tela que irá aparecer é a Define Custom Statements or Stored Procedures, a opção SQL Statement deve estar marcada e no campo destinado deve-se digitar a instrução SQL que está definida na Listagem 12 que retorna os grupos e seus códigos. Depois, deve-se clickar em Test Query para testar a consulta que deve apresentar um Grid com as colunas id_grupo e descrição. Feito isso, deve-se clickar em Finish para terminar a configuração da fonte de dados 62 que será utilizada. A tela Choose a Data Source será mostrada novamente, porém, a lista Select a data source estará preenchida com a fonte de dados SqlDataSourceGrupos. Na lista Select a data Field to display in the DropDownList, o campo descricao deve ser selecionado e na lista Select a data Field for the value of the DropDownList deve-se escolher o campo código. Feito isso, devese clickar em OK para finalizar o assistente. Para testar se tudo foi configurado da maneira correta, basta executar a aplicação e verificar se o DropDownListGrupos vem preenchido com os Grupos. SELECT id_grupo, descricao FROM grupo Listagem 12 – Consulta de grupos Para carregar o DropDownListUsuarios deve-se seguir os mesmos passos informados, alterando apenas o nome do componente DataSource para “SqlDataSourceUsuarios” e utilizar o código da Listagem 13, que é uma instrução que retorna os Usuários pertencentes ao Grupo selecionado. SELECT id_usuario, nome FROM usuario WHERE id_grupo = @id_grupo Listagem 13 – Consulta de usuários do grupo Pode-se notar na Listagem 13 que está possui um parâmetro chamado @id_grupo que será utilizado para informar o código do grupo que está sendo realizada a busca. Por existir este parâmetro a ser passado, será apresentada a janela Define Parameters onde deve ser selecionado o parâmetro id_grupo para se definir que o valor do parâmetro deve se obtido por meio do valor selecionado no DropDownListGrupos, para isso, na opção Control da lista Parameter source e a opção DropDownListGrupos em ControlID. Feito isso, deve-se clickar em Next e depois em Test Query para testar a consulta parametrizada. A janela Parameter Values Editor deve ser apresentada para que seja informado um valor para o parâmetro na coluna Value para realizar um teste de consulta que deve apresentar um Grid com as colunas id_usuario e nome. 63 Para carregar os dados do usuário na GridViewUsuarios é necessário seguir os passos descritos acimas mudando apenas o nome do DataSource para SqlDataSourceDadosUsuario. Na tela Define Custom Statements or Stored Procedures deve-se informar o código da Listagem 14 que corresponde a uma busca que retorna o Codigo, Nome, Rua, Numero, Cidade, Estado, Email, Usuario. Porém, esta consulta possui dois parâmetros que são @id_usuario e @id_grupo que servem para informar o id do usuário e o id do grupo. SELECT id_usuario AS Codigo, nome AS Nome, rua AS Rua, numero AS Numero, cidade AS Cidade, estado AS Estado, email AS Email, usuario AS Usuario FROM usuario WHERE id_usuario = @id_usuario AND id_grupo = @id_grupo Listagem 14 – Tabelas do Banco de Dados Como essa consulta possui parâmetros, novamente a janela Define Parameters será apresentada para serem definidos os parâmetros. Para o parâmetro id_grupo, deve ser defino a opção Control em Parameter Source e na opção ControlID o DropDownListGrupos e para o parâmetro id_usuario, deve ser escolhida novamente a opção Control e o DropDownListUsuarios para a opção ControlID. Para testar, basta executar a aplicação Web e verificar as novas funcionalidades selecionando o Grupo e vendo que as opções da segunda lista é alterada. Apresentação das informações nos rótulos Até o momento foram utilizados apenas os assistentes do Visual Studio para inserção das funcionalidades, não sendo necessário escrever uma linha de código para isso. Serão adicionadas algumas linhas de código para que a LabelUsuario seja atualizada do lado do servidor com o nome do usuário escolhido. Nos códigos da página Default.aspx, é necessário acrescentar a propriedade Text ao rótulo com o valor definido do lado do servidor tal 64 como o código apresentado na Listagem 15. <asp:Label ID="LabelUsuario" CssClass="info" runat="server" Text="<%# DropDownListUsuarios.SelectedItem.Text.ToUpper() %>"><br/> </asp:Label> Listagem 15 – Vinculação do dado na propriedade Text do rótulo Aos eventos DataBound e SelectedIndexChanged do controle DropDownListUsuarios deve ser adicionado o código da Listagem 16 para que exista a atualização do dado vinculado ao rótulo. protected void DropDownListUsuario_DataBound(object sender, EventArgs e) { LabelUsuario.DataBind(); } protected void DropDownListUsuarios_SelectedIndexChanged(object sender, EventArgs e) { LabelUsuario.DataBind(); } Listagem 16 – Atualização dos dados vinculados aos rótulos Adicionando as Funcionalidades do AJAX na aplicação Web Para adicionar as funcionalidades do AJAX na aplicação Web, devem ser inseridos os controles ScriptManager e UpdatePanel que são partes fundamentais para o funcionamento do ASP.NET AJAX. O ScriptManager é uma das principais partes do ASP.NET AJAX 2.0 Extensions 1.0, sendo responsável por gerenciar os recursos do AJAX na página ASP.NET, tais como baixar o JavaScript da biblioteca AJAX e coordenar as atualizações parciais nas páginas que são habilitadas com o uso do UpdatePanel, sendo muito importante que o ScriptManager seja colocado na página ASPX antes de qualquer outro controle que necessite dele como o UpdatePanel que provoca um retorno ao servidor web (postback) que são automaticamente configurados como disparadores (trigger) do controle, ou seja, provoca a atualização do conteúdo 65 desse painel. Os UpdatePanel são utilizados em conjunto com o ScriptManager para permitir a atualização parcial da página que melhora a experiência do usuário por motivos como a diminuição do volume de informações trocadas entre o navegador e o servidor web, redução do efeito de “piscar” em relação a uma atualização completa do conteúdo e a interface não é posicionada no início da pagina em cada retorno ao servidor web. Para adicionar o ScriptManager na página deve-se arrastar o componente ScriptManager que fica na aba AJAX Extencions do ToolBox para a parte inicial da página. Feito isso, o componente UpdatePanel deve ser utilizado para delimitar a região de atualização parcial da página. Na aplicação web Default.aspx, foram utilizados dois UpdatePanel, sendo o primeiro com o nome de UpdatePanelUsuariosGrupo delimitando o DropDownListUsuario e o segundo chamado de UpdatePanelUsuario delimitando desde a LabelUsuario até o final da GridViewUsuarios conforme mostra a Listagem 17. <asp:UpdatePanel ID="UpdatePanelUsuariosGrupo" runat="server"> <ContentTemplate> Selecione o Usuário do Grupo: <br /> ... </asp:DropDownList> </ContentTemplate> </asp:UpdatePanel> <asp:UpdatePanel ID="UpdatePanelUsuario" runat="server" > <ContentTemplate> <div class="titulo"> Informações do Usuário: <asp:Label ID="LabelUsuario" </asp:GridView> </ContentTemplate> </asp:UpdatePanel> Listagem 17 – Posicionamento dos controles UpdatePanel No modo de edição visual da página Default.aspx (designer), devem ser alteradas de ambos os UpdatePanel as propriedades ChildrenAsTrigger para False o que não permitirá que 66 seja realizado um retorno ao servidor web pelo controle que está dentro dele, alterar a propriedade UpdateMode para o valor Conditional que indica que o controle deve ser atualizado apenas quando solicitado e na propriedade Triggers deve ser adicionado um disparados de retorno assíncrono (AsyncPostBackTrigger) por meio do botão “...”. No UpdatePanel UpdatePanelUsuariosGrupo, a propriedade ControlID deve ser escolhido o DropDownListGrupos e na propriedade EventName deve ser escolhido o evento SelectedIndexChanged. Para o UpdatePanel UpdatePanelUsuario a propriedade ControlID deve estar o DropDownListUuarios e na propriedade EventName deve estar definido o mesmo evento SelectedIndexChanged. A Figura 13 mostra como deve ficar a página Defaul.aspx no modelo de apresentação Designer da IDE Visual Studio. Figura 13 – Modelo de apresentação no Visual Studio 67 Para verificar se está tudo funcionando corretamente, depois de executar a aplicação, deve-se perceber que ao alterar o Grupo de Usuários do DropDownListGrupos, o DropDownListUsuariosGrupos será apresentado com os Usuários cadastrados no Grupo escolhido e após selecionar um dos usuários listados, a GridViewUsuarios irá exibir os dados referentes ao cadastro desse usuário. Como o carregamento da página utilizando o AJAX é mais rápido que o carregamento sem essa funcionalidade, o usuário pode não perceber que a informação já foi carregada e ficar aguardando a página recarregar por completo, como ele está acostumado. Para evitar esse tipo de situação, é possível apresentar uma mensagem informativa ao usuário toda vez que houver uma atualização parcial da página. Adicionando controle UpdateProgress Os UpdateProgress são utilizados com a finalidade de apresentar ao usuário o progresso de atualização parcial da página. Este controle pode sempre ser utilizado em conjunto com um UpdatePanel para informar ao usuário sobre as atualizações parciais. Para utilização na aplicação web, o UpdateProgress mostrará ao usuário uma mensagem informativa quando provocada uma atualização parcial da página. Pensando nisso, foi colocada uma pseudo-classe chamada mensagemProgresso para elementos div no arquivo Estilos.css que define um posicionamento absoluto da mensagem de progresso sobre o formulário HTML de filtragem dos usuários por grupo que pode ser definido no final do código da página. Devem ser inseridos dois controles UpdateProgress na parte inferior da página Default.aspx e a propriedade ID de cada um deve ser definido como 68 “UpdateProgressUsuariosGrupos” AssiciatedUpdatePanelID devem e “UpdateProgressUsuario” ser definidas como e a propriedade “UpdatePanelUsuariosGrupo” e “UpdatePanelUsuario” respectivamente. A propriedade DisplayAfter que define o tempo de atraso em milissegundos de cada controle deve ser alteradas de “500” para “0”, fazendo com que a mensagem de progresso seja mostrada imediatamente quando uma chamada assíncrona for realizada ao servidor para atualizar o painel associado, de forma que o código deve ficar como o da Listagem 18. <asp:UpdateProgress ID="UpdateProgressUsuariosGrupo" runat="server" AssociatedUpdatePanelID="UpdatePanelUsuariosGrupo" DisplayAfter="0"> <ProgressTemplate> <div class="mensagemProgresso"> Carregando os Usuarios do Grupo... </div> </ProgressTemplate> </asp:UpdateProgress> <asp:UpdateProgress ID="UpdateProgressUsuario" runat="server" AssociatedUpdatePanelID="UpdatePanelUsuario" DisplayAfter="0"> <ProgressTemplate> <div class="mensagemProgresso"> Carregando os dados do Usuario... </div> </ProgressTemplate> </asp:UpdateProgress> Listagem 18 – Código dos controles UpdateProgress A Figura 14 mostra mensagem de progresso sendo apresentada quando uma requisição é feita ao servidor e a aplicação aguarda para receber estas informações para atualizar apenas a parte referente à requisição realizada pelo navegador do cliente. 69 Figura 14 – Mensagem de progresso sendo apresentada Como apresentado na Figura 14, o usuário é informado através da mensagem de progresso que a aplicação está aguardando uma resposta do servidor para carregar a parte da página referente à requisição que, no caso, são os dados do Usuário para serem carregados na tela. 3.1. Resultados obtidos Com este exemplo de aplicação Web, foi possível perceber que a utilização do AJAX em uma aplicação Web a torna mais rica, interativa e rápida. A utilização do framework da Microsoft para o desenvolvimento AJAX permite criar interfaces mais ricas. Outro ponto que pode ser notado é a agilidade que a utilização do Visual Studio juntamente com o framework ASP.NET AJAX traz para o desenvolvimento da aplicação que normalmente é bastante trabalhoso de desenvolver. 70 A complexidade escondida pela utilização do framework ASP.NET AJAX pode ser vista nos exemplos citados anteriormente onde, cada objeto deve ser instanciado na aplicação e atribuído seus valores. Com a utilização do framework, isso fica mais fácil, pois, que faz o gerenciamento destas informações é o próprio framework, não havendo a necessidade de digitar uma linha sequer para esses objetos. O framework fornecido gratuitamente pela Microsoft oferece muitos outros recursos como acesso a arquivos XML, controles do lado do servidor e manipulação de dados remotos, direto do browser e sem a necessidade de escrever muito código para isso. A aplicação desenvolvida possui ainda um comportamento Cross-Browser, ou seja, ela funciona corretamente com os principais navegadores da atualidade, como: Internet Explorer 5.0 ou superior, Firefox 1.0 ou superior, Apple Safari 1.2 ou superior, Opera 8.0 ou superior e o Netscape 7.0 ou superior. 71 CONSIDERAÇÕES FINAIS As aplicações web utilizam cada vez mais de recursos visuais e mesmo com essa preocupação e a popularização da internet banda larga, muitas dessas aplicações não tem se preocupado com a forma que o usuário irá enxergar as informações apresentadas, e por isso, acabam trazendo informações desnecessárias aumentando o tráfego na rede, o que não é muito agradável ao usuário. Visando a solução de problemas semelhantes, este trabalho apresentou a metodologia de desenvolvimento AJAX, oferecendo informações sobre o que ela é, como ela funciona, onde utilizá-la e suas limitações com alguns exemplos de empresas que a utilizam o conceito da Web 2.0 com recursos em AJAX. Além da metodologia AJAX foram apresentados os conceitos de algumas tecnologias que envolvem esta metodologia de desenvolvimento como, por exemplo, HTML, JavaScript, XML, DOM e algumas frameworks de desenvolvimento. Foi apresentado por último um estudo de caso que teve por objetivo, além de mostrar como implementar uma aplicação web, mostrar também uma framework que auxilia e facilita o desenvolvimento de uma aplicação web utilizando o AJAX e por último foram dispostos os resultados obtidos com o desenvolvimento deste estudo de caso utilizando a framework ASP.NET AJAX 2.0. Como foi possível verificar por todo o trabalho, o AJAX não é uma tecnologia de desenvolvimento, mas sim, uma metodologia. Isso porque, as tecnologias que englobam esta metodologia já são utilizadas há bastante tempo, porém, o nome AJAX foi lançado apenas em fevereiro de 2005 por Jesse James Garrett na mesma época que Tim O’Reilly lançava o conceito da Web 2.0, sendo mais dinâmica e voltada para o usuário visando a inteligência coletiva. 72 REFERÊNCIAS AJAXLIB. 2007. Disponível em: <http://AJAXlib.sourceforge.net>. Acesso em: out. 2007. ASLESON Ryan; SCHUTTA, Nathaniel T. Fundamentos do Ajax. Rio de janeiro: Alta Books, 2002. ATLAS. 2007. Disponível em: <http://atlas.asp.net/atlastoolkit>. Acesso em: out. 2007. BUENO, Luiz Henrique; SCHAAF, Sergio. Aplicações Web com Visual Studio .NET, ASP.NET e C#. Rio de janeiro: Alta Books, 2002. DEITEL, Harvey M.; DEITEL, Paul J. Java Como Programar . Porto Alegre: Bookman, 2003. DOJO. 2007. Disponível em: <http://dojotoolkit.org>. Acesso em: out. 2007. DWR. 2007. Disponível em: <http://getahead.ltd.uk>. Acesso em: out. 2007. ECHO2. 2007. Disponível em: <http://www.nextapp.com/products/echo2>. Acesso em: out. 2007. FLANAGAM, David. JavaScript – O Guia Definitivo. Porto Alegre: Bookman, 2004. GONÇALVES, Edson. Dominando o AJAX. Rio de Janeiro: Ciência Moderna, 2006. GWT. 2007. Disponível em: <http://code.google.com>. Acesso em: out. 2007. Lemay, Laura. HTML 4. Rio de Janeiro: Campus, 1998. MOCHIKIT. 2007. Disponível em: <http://mochikit.com>. Acesso em: out. 2007. PROTOTYPE. 2007. Disponível em: <http://prototype.conio.net>. Acesso em: out. 2007. SAJAX. 2007. Disponível em: <http://absinth.modernmethod.com/sajax>. Acesso em: out. 2007. SHEPHERD, George. Microsoft ASP.NET 2.0. Porto Alegre: Bookman, 2006. SYMFONY. 2007. Disponível em: <http://www.symfony-project.com>. Acesso em: out. 2007. TURTSCHI, Adrian; WERRY, Jason; HACK, Greg. C#.Net - Guia do Desenvolvedor Web. Rio de janeiro: Alta Books, 2004. 73 XAJAX. 2007. Disponível em: <http://www.xAJAXproject.org>. Acesso em: out. 2007. XOAD. 2007. Disponível em: < http://www.xoad.org>. Acesso em: out. 2007. YAHOO Mail. 2007. Disponível em: <http://mail.yahoo.com.br>. Acesso em: out. 2007.