Java Server Faces (JSF): Desenvolvimento de aplicações web

Esse artigo mostra um pequeno guia para quem está começando no mundo Web e quer se aprofundar no framework JavaServer Faces (JSF) e aprender a desenvolver aplicações em Java Web.

Java Server Faces (JSF)

Este artigo continuará a abordar o tema de introdução ao desenvolvimento de aplicações com foco na web, que foi tratado na edição 36 da revista Easy Java Magazine, onde discutimos o início do desenvolvimento de aplicações web utilizando Servlets e JSP. Ao longo do artigo serão apresentadas conceituações técnicas sobre as tecnologias necessárias à criação de um sistema web utilizando JSF, visando descomplicar a vida de quem está entrando neste mercado.

Aplicações web são hoje o principal tipo de aplicação desenvolvida por empresas de TI. Isso faz com que a cada dia surjam soluções que tentam ajudar os desenvolvedores no árduo trabalho da criação de sistemas. Com a concorrência do mercado de desenvolvimento de software, há diversas opções de frameworks Java para atender aos anseios dos desenvolvedores.

Como vimos no artigo publicado na Easy Java Magazine 36, de título “Introdução ao desenvolvimento de aplicações web”, existem frameworks baseados em Ações, ou Action Based, e frameworks baseados em Componentes, ou Component Based.

Atualmente, os frameworks baseados em Componentes vêm se destacando no mercado pela facilidade de criarmos aplicações web com recursos visuais complexos. Assim, podemos nos preocupar apenas com qual componente devemos utilizar em uma determinada página como, por exemplo, um componente de calendário, e não mais em como iremos ter que programar tal componente usando HTML ou JavaScript.

A especificação do JSF, acrônimo de JavaServer Faces, atualmente na versão 2.2, definido na especificação JSR-344, veio para padronizar o uso de componentes ricos pelas aplicações, além de se tornar uma referência às empresas com garantia de extensibilidade de seus componentes, ou seja, é possível a criação de novos componentes que se encaixam nas necessidades de sua aplicação.

Essa possibilidade de customização de componentes é um recurso poderoso de extensão para atender às demandas específicas de reuso presentes nas aplicações web atuais.

Nesse contexto do uso de componentes, iremos visualizar o que muda quando utilizamos Servlets e JSP na criação de aplicações Web adotando este novo paradigma de programação orientada ao uso de componentes.

Protocolo HTTP: Stateless

O protocolo Hypertext Transfer Protocol (HTTP) é o método utilizado para enviar e receber informações na web. Está atualmente na versão 1.1, sendo definido pela especificação RFC 2616. Esta especificação é leitura obrigatória para todos os desenvolvedores que programam aplicações Web.

O protocolo HTTP é baseado em requisições e respostas entre clientes e servidores. O cliente — navegador ou dispositivo que fará a requisição; também é conhecido como user agent — solicita um determinado recurso (resource), enviando um pacote de informações contendo alguns cabeçalhos (headers) a uma URI ou, mais especificamente, URL, como vimos em nosso artigo anterior.

O servidor recebe estas informações e envia uma resposta, que pode ser um recurso ou simplesmente outro cabeçalho.

Na Listagem 1 temos um exemplo de como seria um cabeçalho enviado em uma requisição. É possível visualizar os cabeçalhos de uma requisição utilizando programas voltados para isto, que são conhecidos como sniffers. Um exemplo gratuito e muito utilizado seria o aplicativo WireShark.

Listagem 1. Exemplo de cabeçalho HTTP.

GET / HTTP/1.1
Host: google.com.br
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Segundo este cabeçalho, estamos enviando algumas informações que identificam nosso cliente no caminho (path) e, o mais importante, qual o método da requisição. O servidor, por sua vez, identifica os cabeçalhos que lhe são convenientes e envia uma resposta.

Nos cabeçalhos de resposta, como mostrado na Listagem 2, você pode obter algumas informações muito importantes, dentre elas o código de resposta (Status). Este código identifica se uma requisição foi concluída com sucesso (200) ou se ela não existe (404), por exemplo.

Listagem 2. Exemplo de resposta de umarequisição HTTP

HTTP/1.1 200 OK
Date: Mon, 23 Jun 2014 22:38:34 GMT
Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Etag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html; charset=UTF-8

Outra informação importante sobre o protocolo HTTP é sua característica stateless – ele não é capaz por si só de reter informações entre requisições diferentes. Para persistir informações você precisa utilizar cookies, sessões, campos de formulário ou variáveis informadas na própria URL.

Assim, quando desenvolvemos aplicações web, precisamos superar o problema de armazenamento de informações necessárias aos próximos passos que o usuário dará dentro do contexto de nossa aplicação.

Mas, como assim? Imagine uma aplicação web simples, onde você gostaria que o nome do usuário, que foi capturado do banco de dados no momento do login do usuário, estivesse sempre presente em todas as páginas que ele acessasse, sem a necessidade de efetuar uma nova consulta no banco de dados.

Pensando assim, poderíamos armazenar essas informações em algum lugar onde pudéssemos consultá-las sempre que necessário, e que estas não fossem perdidas a cada nova requisição do usuário. Para isto, poderíamos armazená-las então em uma sessão ou cookie, que será criado para o usuário, e que é a ligação dele com o servidor para saber que o mesmo cliente que iniciou o acesso à aplicação, está agora percorrendo as diferentes páginas da aplicação.

O JSF foi criado para tratar além de outros problemas, essa característica stateless do protocolo HTTP, provendo uma maneira de desenvolver aplicações web de forma stateful, com seus componentes se encarregando de armazenar o estado atual do contexto do usuário no momento em que este solicita uma requisição.

JSP x Facelets

Relembrando o artigo da edição 36, a tecnologia JSP, acrônimo de JavaServer Pages, é uma linguagem de script baseada em uma especificação Java, a JSR-245, que está atualmente na versão 2.1 e é utilizada para a criação de páginas com conteúdo estático ou dinâmico.

Quando o JSF foi criado, a intenção era utilizar o JSP como a principal tecnologia para o layout de páginas, uma vez que este já era o padrão utilizado na comunidade web.

A ideia foi juntar o útil ao agradável, simplificando a aprovação do JSF usando uma linguagem de tags familiar que já possuía uma grande aceitação em meio à comunidade Java.

Porém, infelizmente, JSP e JSF não eram naturalmente complementares, uma vez que o JSP é usado para criar conteúdo estático ou dinâmico na web, mas não para a criação de componentes, organizados em árvores. "

[...] continue lendo...

Artigos relacionados