Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que se trata o artigo:

Este artigo apresenta o framework Click, utilizado na implementação de aplicações web em Java. Ele possui foco na simplicidade, facilidade de uso e não é um framework MVC tradicional, sendo orientado a páginas e controles.


Para que serve:

Este artigo serve para introduzir os desenvolvedores ao Click, um framework para programação web que representa uma alternativa aos frameworks tradicionais.


Em que situação o tema é útil:

Desenvolvedores de aplicações web em Java encontrarão neste artigo um apanhado geral a respeito das principais funcionalidades do Click, um framework cujo objetivo é adicionar simplicidade e produtividade ao desenvolvimento.

Aplicações Web com o Click:

O Click é um framework para criação de aplicações web, que apresenta alguns diferenciais quando comparado a outros frameworks mais conhecidos. A sua proposta é ser fácil de utilizar e aprender, além de buscar um aumento na produtividade do desenvolvimento. O Click não é baseado em MVC (Model-View-Controller), mas sim em um modelo próprio onde a programação é feita orientada a páginas da aplicação e aos controles que fazem parte dessas páginas. Este artigo introduz o Click e, enquanto explica suas principais funcionalidades, aborda, passo-a-passo, o desenvolvimento de uma aplicação completa.

É fato que o uso de Java para programação web é muito difundido. E também é fato que existem diversos frameworks que buscam facilitar o trabalho do programador quando o assunto é desenvolvimento web. Os mais famosos são os frameworks que implementam o padrão MVC (Model-View-Controller) e buscam separar as responsabilidades de cada componente da aplicação.

O Click é um framework web open-source pertencente à Apache Foundation. Ele não é baseado em MVC, uma vez que aposta na ideia de que, para a grande maioria das aplicações, as camadas View e Controller são, na verdade, a mesma coisa. Isto simplifica bastante a forma de programar, sendo o grande diferencial do Click: ao invés de ser orientado a ações (como são os frameworks MVC tradicionais), ele é orientado a páginas e controles. A ideia principal é ter uma classe Java representando uma página da aplicação. Além disso, o Click disponibiliza uma série de controles, implementados em Java, que podem ser usados para criar as interfaces gráficas. Estes controles são, basicamente, os mesmos encontrados em páginas HTML, como caixas de texto, formulários, tabelas, botões, etc. Isso tudo, somado a um modelo de programação baseado em eventos, fazem com que o Click tenha bastante semelhança à programação Swing, mas para o ambiente web.

A proposta deste artigo é construir uma aplicação simples estilo CRUD (create, read, update, delete) usando o framework Click. A aplicação será baseada em uma agenda, onde será possível criar, editar, excluir e listar tarefas. Durante a sua construção, o framework e algumas de suas principais características e funcionalidades serão introduzidas.

Configuração do Click

A configuração do Click é simples, seguindo a filosofia adotada pelo framework. O primeiro passo é fazer o seu download na página oficial do projeto, que pode ser obtida nas referências deste artigo. Na sequência, é necessário adicionar os JARs click-2.2.0.jar e click-extras-2.2.0.jar no projeto (a última versão do Click disponível até a escrita deste artigo é a 2.2.0). Em termos de classpath, isto é tudo o que é necessário fazer.

A próxima configuração deve ser feita no arquivo web.xml. É preciso declarar o servlet do Click que será responsável por interceptar as requisições. Este servlet é o org.apache.click.ClickServlet, que deve ser configurado com o load-on-startup ativado, a fim de que ele possa ser carregado no momento que o servidor for iniciado. Esta configuração de load-on-startup não é obrigatória, mas evita que o primeiro acesso à aplicação seja mais demorado, já que o servlet realiza uma série de inicializações que podem demandar certo tempo. Além disso, é preciso mapear um padrão de requisição para ser interceptado pelo servlet. O padrão do Click é utilizar a extensão htm. A Listagem 1 mostra a configuração que deve ser realizada no arquivo web.xml.

Listagem 1. Configurando o arquivo web.xml.

<web-app>
    <servlet>
      <servlet-name>ClickServlet</servlet-name>
      <servlet-class>org.apache.click.ClickServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
      <servlet-name>ClickServlet</servlet-name>
      <url-pattern>*.htm</url-pattern>
    </servlet-mapping>
  </web-app>

Por fim, é preciso criar o arquivo click.xml, que armazena as configurações do framework. Aliás, este é o único arquivo de configuração necessário, o que vai de encontro à filosofia do Click de buscar a simplicidade. A Listagem 2 mostra um exemplo de conteúdo do arquivo click.xml.

Listagem 2. Arquivo de configuração click.xml.

<!DOCTYPE click-app PUBLIC
    "-//Apache Software Foundation//DTD Click Configuration 2.2//EN"
    "http://click.apache.org/dtds/click-2.2.dtd">
   
  <click-app charset="UTF-8">
    <pages package="agenda.page" automapping="false">
       <page path="lista-tarefas.htm" classname="ListaTarefas" />
       <page path="tarefa-form.htm" classname="TarefaForm" />
    </pages>
   
    <mode value="debug"/>
  </click-app>

A primeira tag importante encontrada neste arquivo é a pages. Para entender como ela funciona, é preciso conhecer um conceito fundamental do Click: como funciona a renderização das páginas.

Cada página da aplicação é representada por dois arquivos: uma classe Java, chamada page class, e um arquivo de template. Na page class são criados os controles (formulários, tabelas, caixas de texto, botões, etc.) que serão renderizados como uma página HTML para o cliente. Além disso, nestas classes são também implementados os métodos para tratamento de eventos (cliques em links ou botões, por exemplo). Já o arquivo de template, por padrão, segue a linguagem do Velocity. Quando a página está prestes a ser renderizada, o Click utiliza os dados vindos da classe Java para popular os dados definidos no template e renderiza o resultado desta composição em formato HTML. Na sequência do artigo isto será mostrado através de exemplos práticos.

O Velocity define uma linguagem simples e poderosa de template, que pode ser utilizada para referenciar elementos do Java, como objetos e variáveis. O uso do Velocity é adotado como padrão pelo Click, mas não é obrigatório. A documentação do Click explica como integrá-lo a outras tecnologias, como XML e JSP.

Agora que você já conhece essa característica do Click, observe novamente a tag pages. Ela define um pacote onde estão localizadas as classes que representam as páginas da aplicação, através do atributo package. Neste exemplo, todas estas classes estarão contidas no pacote agenda.page. Dentro desta tag são declaradas diversas tags page, onde cada uma delas representa um mapeamento entre a classe Java e o template utilizado por ela. No exemplo da Listagem 2 são criados dois mapeamentos: o arquivo lista-tarefas.htm para agenda.page.ListaTarefas e tarefa-form.htm para agenda.page.TarefaForm. Perceba que não é necessário dizer o pacote onde a classe se encontra, uma vez que ele já foi declarado no atributo package. Caso sua aplicação possua mais de um pacote contendo page classes, basta definir várias tags pages no arquivo click.xml.

Se, a princípio, esta configuração de mapeamento do Click parece ser simples, ela exige um trabalho considerável de manutenção quando a aplicação tem muitas páginas. Pensando nisso, os desenvolvedores do Click criaram um mecanismo chamado auto mapping. O auto mapping analisa os arquivos de template existentes (normalmente com a extensão htm) e tenta encontrar a sua page class correspondente. A Listagem 3 mostra como ficaria o arquivo click.xml com o auto mapping habilitado.

Listagem 3. Arquivo de configuração click.xml com o auto mapping habilitado.

<!DOCTYPE click-app PUBLIC
    "-//Apache Software Foundation//DTD Click Configuration 2.2//EN"
    "http://click.apache.org/dtds/click-2.2.dtd">
   
  <click-app charset="UTF-8">
    <pages package="agenda.page" />
    <mode value="debug"/>
  </click-app>

Quando o atributo automapping da tag pages não é especificado, é assumido que ele está habilitado (equivale a defini-lo com o valor true). Dessa forma, as tags page que configuram os mapeamentos não precisam ser especificadas. É preciso apenas informar em qual pacote estão as page classes e o Click se encarrega do restante do processo.

Para que o Click consiga encontrar as page classes associadas aos templates, é necessário seguir uma convenção pré-estabelecida para os nomes dos arquivos. Se ListaTarefas é sua page class, você pode usar os seguintes nomes de arquivos de template: lista-tarefas.htm, lista_tarefas.htm, listaTarefas.htm ou ListaTarefas.htm. Se qualquer um desses nomes for especificado, o Click conseguirá estabelecer o mapeamento de forma automática. Outra regra importante é que, se nenhuma page class for encontrada, o framework tentará buscá-la com o mesmo nome, mas com o sufixo ...

Quer ler esse conteúdo completo? Tenha acesso completo