Google Guice Sitebricks: Criando uma aplicação web com Java
Veja nesse artigo como criar uma aplicação web utilizando o Sitebricks desenvolvido pelo Google Guice.
O Sitebricks é um conjunto de bibliotecas para as aplicações web. Ele foi desenvolvido pelo Google Guice com ênfase em código conciso, o que ajuda no desenvovimento rápido.
Mesmo ainda na versão beta, uma das grandes vantagens é que o desenvolvedor não terá que criar ou editar um monte de arquivos XML para usá-lo. Em vez disso, o Sitebricks permite criar aplicações Web ao escrever muito menos código. O código que você vai escrever será muito simples.
O Sitebricks não compromete a segurança de ou desempenho de sua aplicação.
Sitebricks é uma estrutura leve que fornece ferramentas versáteis para criar rapidamente aplicações web. Para entender melhor isso, vamos passar para o desenvolvimento.
É necessário que o leitor tenha como pré-requisitos:
- Maven
- Github
- Tomcat / Jetty
Maven
O Sitebricks está disponível através do Maven e possui publicações com bastante frequências. E para adicionar o Sitebricks em seu projeto, basta adicionar as dependências da Listagem 1 no seu arquivo pom.xml.
Listagem 1. Incluindo dependências
<dependency>
<groupId>com.google.sitebricks</groupId>
<artifactId>sitebricks</artifactId>
<version>0.8.5</version>
</dependency>
Configurando a partir do código
Para começar a configurar o Sitebricks a partir do código, você vai precisar de, ao menos, a versão 2.2.1 do Maven (3.0.3 também é válido) e o git instalado.
Primeiro, faça o “git clone”do código fonte hospedado no Github:
git clone https://github.com/dhanji/sitebricks.git sitebricks[devdani2]
Agora você pode construir o Sitebricks e instalá-lo no seu repositório local do Maven.
cd sitebricks
mvn install
A partir de agora, você terá uma cópia do jar Sitebricks snapshot no seu repositório local.
IMPORTANTE: Lembre-se que para usar a versão snapshot adicione as linhas no arquivo pom.xml do seu projeto, conforme a Listagem 2.
Listagem 2. Adicionando a versão snapshot
<dependency>
<groupId>com.google.sitebricks</groupId>
<artifactId>sitebricks</artifactId>
<version>0.8.6-SNAPSHOT</version>
</dependency>
Se você não sabe criar um arquivo pom.xml você pode instalar um plugin no Eclipse sobre o maven o acessar o Guia oficial em seu site oficial que irá mostrar como construir o arquivo pom.xml em seu projeto (mas aconselhamos utilizar o plugin para facilitar a construção deste arquivo).
Agora você deve colocar seus templates HTML lado a lado das classes ou na raiz do webapp. Para isso, siga os pasos a seguir para construirmos um Hello word:
- Passo 1: Crie um Guice injector, configurando o Sitebricks e a Servlet Guice.
- Passo 2: Crie um objeto de página, como Example.java, que irá chamar o HTML (calledexample.html).
- Passo 3: Customizar a página para dar-lhe algum comportamento dinâmico
Passo 1: Guice Injector
Primeiro vamos criar e configurar nosso Guice injector. Isto é feito através do ServletContextListener que funciona quando a aplicação é inicializada. Vamos chamar isto de AppConfig e colocá-lo em nosso pacote, conforme a Listagem 3.
Listagem 3. Incluindo o pacote sitebricks
package org.sitebricks.example;
public class AppConfig extends GuiceServletContextListener {
@Override
public Injector getInjector() {
return Guice.createInjector(new SitebricksModule());
}
}
Isto diz ao Guice para encaminhar todas as solicitações recebidas para o Sitebricks (se o Sitebricks não pode lidar com eles, eles serão devolvidos ao servlet normal, de acordo com web.xml). Isso também nos permite tirar proveito da poderosa funcionalidade web-escopo do Guice.
Agora precisamos dizer ao Sitebricks que os pacotes devem procurar nossos templates e páginas. Isto é feito através da adição de mais um passo no arquivo AppConfig, conforme a Listagem 4.
Listagem 4. Configurando o template
@Override
public Injector getInjector() {
return Guice.createInjector(new SitebricksModule() {
@Override
protected void configureSitebricks() {
// scaneia classes do pacote e suas descendencias
scan(Example.class.getPackage());
}
});
}
Agora devemos registar no filtro GuiceFilter dentro do arquivo web.xml de seu projeto, conforme a Listagem 5.
Listagem 5. GuiceFilter
<filter>
<filter-name>webFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>webFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.sitebricks.example.AppConfig</listener-class>
</listener>
Passo 2: A Primeira Página Web
Iremos criar a classe Example de que falamos. Observe a Listagem 6.
Listagem 6. Classe Example
@At("/")
public class Example {
private String message = "Hello";
public String getMessage() { return message; }
}
O @At diz ao Sitebricks para lançar a página web na url "/". Então, se você executar seu servidor web e acessar o localhost na porta 8080 e visitar a URL http://localhost:8080/ no seu navegador, a página Example irá aparecer.
O Arquivo HTML template para o Example deve ser parecido com o código da Listagem 7.
Listagem 7. Template HTML
<html>
<body>
@ShowIf(true)
<p>$ from Sitebricks!</p>
</body>
</html>
A expressão $ é avaliada em tempo de execução em uma instância do exemplo. No nosso caso, esta é avaliada como a string: "Hello".
Neste modelo, a anotação chamada de @ShowIf diz ao Sitebricks para converter o <p> com um comportamento dinâmico (neste caso, é mostrado se uma expressão for avaliada como verdadeira). A expressão passada pela @ShowIf (true) é sempre verdadeira (!), então a tag <p> e seu conteúdo é sempre mostrado.
Passo 3: Adicionando um comportamento
Vamos tornar o exemplo um pouco mais interessante. Primeiro, vamos fazer o @ShowIf receber uma variável boolean na página, conforme abaixo:
@ShowIf(appear)
<p>$ from Sitebricks!</p>
…
E então, adicione isto como uma variável de campo na classe Example, conforme a Listagem 8.
Listagem 8. Adicionando o comportamento a página
@At("/")
public class Example {
private boolean appear = true;
private String message = "Hello";
public boolean getAppear() { return appear; }
public String getMessage() { return message; }
}
NOTA: É importante adicionar um método get para as variáveis de campo.
Aparentemente, a página ainda parece ser a mesma, porém, o comportamente agora está mais dinâmico.
Vamos adicionar agora um link a uma ancora HTML nesta página, conforme a Listagem 9.
Listagem 9. Inlcuindo ancora
<a href="?appear=${!appear}">show/hide</a>
@ShowIf(appear)
<p>$ from Sitebricks!</p>
…
O link para exibir / ocultar faz com que o navegador precise solicitar a mesma página, mas com um parâmetro. Ao colocar a expressão $ {!} nós podemos alternar o valor booleano que vai aparecer no link.
Agora, cada vez que a página é solicitada, o Sitebricks vai “conectar” os valores na consulta para os campos que aparecem no Example. Adicionamos um método set para alterar o valor desta variável boolean, conforme a Listagem 10.
Listagem 10. Método set
@At("/")
public class Example {
// ... details elided
public void setAppear(boolean appear) { this.appear = appear; }
}
Agora inicialize sua aplicação e tente clicar no link.
Eventos HTTP
Quando uma solicitação chegar, você pode “se preparar” para fazer algum código antes de renderizar uma resposta. Por exemplo, você pode recuperar informações armazenadas em um banco de dados. Se estivéssemos tentando mostrar uma lista de filmes, o código da Listagem 11 é exatamente o que nós deveríamos fazer:
Listagem 11. Recuperando informações do banco
<body>
<ul>
@Repeat(items=movies, var="movie")
<li>${movie.name}</li>
</ul>
</body>
Isto é o mais básico e rápido de se construir uma aplicação web utilizando o Sitebricks.
O Sitebricks irá lhe proporcionar um desenvolvimento mais dinâmico e eficaz caso queira constuir uma aplicação web rápida.
Você ainda pode fazer de milhares de coisas com o Sitebricks, o que passamos foi uma introdução e como configurar para poder assim, escrever seus códigos e suas páginas html + jquery + javascript + qualquer coisa que queira utilizar no front-end. Você ainda pode criar eventos HTTP, bricks customizados e muito mais.
Até mais!
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Vídeo