1. Introdução
O PDF do documento está disponível |AQUI|.
Os exemplos no documento estão disponíveis |AQUI|.
Aqui, propomos apresentar duas estruturas utilizando um exemplo cliente/servidor:
- AngularJS utilizado para o cliente. Por uma questão de simplicidade, será doravante referido como Angular;
- Spring 4 utilizado para o servidor. Por uma questão de simplicidade, será doravante referido como Spring;
A compreensão deste documento requer certos pré-requisitos:
- um nível intermédio de Java EE;
- conhecimento de JPA (Java Persistence API), que será utilizado para aceder a uma base de dados;
- conhecimento de pelo menos uma versão anterior do Spring para compreender a filosofia deste framework;
- experiência na utilização do Maven para configurar projetos Java;
- uma compreensão básica da comunicação HTTP numa aplicação web;
- tags HTML comuns;
- conhecimentos básicos de JavaScript;
Outros conhecimentos necessários serão apresentados e explicados à medida que o estudo de caso for avançando.
Este documento não é um curso e está incompleto em muitos aspetos. Para saber mais sobre as duas estruturas, pode consultar as seguintes referências:
- [ref1]: o livro «Pro AngularJS», de Adam Freeman, publicado pela Apress. É um livro excelente. O código-fonte dos exemplos deste livro está disponível gratuitamente em [http://www.apress.com/downloadable/download/sample/sample_id/1527/];
- [ref2]: a documentação oficial do AngularJS [https://docs.angularjs.org/guide]
- [ref3]: o livro "Spring Data" da O'Reilly [http://shop.oreilly.com/product/0636920024767.do], que aborda a utilização do framework [Spring Data] para aceder a dados, quer de bases de dados relacionais, quer de bases de dados não relacionais (NoSQL);
- [ref4]: o livro "Pro Spring 3" publicado pela Apress. Este é o antecessor do Spring 4, mas os conceitos principais já estão abordados;
- [ref5]: documentação de referência do Spring 4 [http://docs.spring.io/spring/docs/current/spring-framework-reference/pdf/spring-framework-reference.pdf].
As fontes utilizadas para este documento são as citadas acima, além do indispensável [http://stackoverflow.com/] para as inúmeras sessões de depuração.
1.1. A Arquitetura da Aplicação
A aplicação em questão terá a seguinte arquitetura:

- Em [1], um servidor web entrega páginas estáticas a um navegador. Estas páginas contêm uma aplicação AngularJS construída com base no padrão MVC (Model–View–Controller). O modelo aqui abrange tanto as vistas como o domínio, representado aqui pela camada [Services];
- o utilizador irá interagir com as vistas que lhe são apresentadas no navegador. As suas ações irão, por vezes, exigir a consulta do servidor Spring 4 [2]. O servidor irá processar o pedido e devolver uma resposta JSON (JavaScript Object Notation) [3]. Esta resposta será utilizada para atualizar a vista apresentada ao utilizador.
1.2. Ferramentas utilizadas
Neste documento, são utilizadas as seguintes ferramentas de desenvolvimento:
- Spring Tool Suite para o servidor Spring: disponível para download gratuito;
- WebStorm para o cliente Angular: está disponível uma versão de avaliação de um mês para download gratuito;
- Wampserver para gerir a base de dados MySQL 5: disponível para download gratuito;
A instalação destas e de outras ferramentas é descrita na Secção 6.
1.3. Funcionalidades da aplicação
O código de exemplo está disponível |AQUI| como um ficheiro ZIP para download.
![]() | ![]() |
- O servidor está contido nas pastas [rdvmedecins-metier-dao-v2] e [rdvmedecins-webapi-v3];
- O cliente encontra-se na pasta [rdvmedecins-angular-v2];
- O script SQL para gerar a base de dados MySQL5 encontra-se na pasta [database];
1.3.1. Criação da base de dados
Para testar a aplicação, começamos por criar a base de dados utilizando o script SQL [dbrdvmedecins.sql]. Utilizamos a ferramenta [PhpMyAdmin] do WampServer:
![]() |
- Em [1], selecione a ferramenta [phpMyAdmin] do WampServer;
- Em [2], selecione a opção [Importar];
![]() |
- em [3], selecione o ficheiro [database/dbrdvmedecins.sql];
- em [4], execute-o;
- em [5], a base de dados é criada.
1.3.2. Servidor Web / Implementação JSON
Utilizando o Spring Tool Suite (STS), importe os dois projetos Maven do servidor Spring 4:
![]() |
- Em [1] e [2], importe os projetos Maven;
- em [3], especificamos a pasta pai para os dois projetos a serem importados;
![]() |
- em [3], os projetos importados. Os projetos podem conter erros. Cada um deles deve utilizar um compilador >=1.7:
![]() |
Por conseguinte, é necessária uma versão da JVM >=1.7:
![]() |
Assim que não houver mais erros da JVM, podemos executar o projeto [rdvmedecins-webapi-v3]:
![]() |
- Em [4], [5] e [6], executamos o projeto [rdvmedecins-webapi-v3] como uma aplicação Spring Boot;
Em seguida, obtemos os seguintes registos na consola do STS:
- Linhas 13-14: A aplicação foi iniciada num servidor Tomcat.
1.3.3. Implementação do cliente Angular
Abrimos a pasta [rdvmedecins-angular-v2] com o WebStorm:
![]() |
- Em [1], selecione a opção [Abrir diretório];
- em [2], selecione a pasta [rdvmedecins-angular-v2];
![]() |
- em [3], a árvore de pastas;
- Em [4], selecione a página principal da aplicação [app.html];
- em [5], abra-a num navegador moderno;
![]() |
- em [6], a página de início de sessão da aplicação. Trata-se de uma aplicação de agendamento de consultas médicas. Esta aplicação já foi abordada no documento Introdução às estruturas JSF2, PrimeFaces e PrimeFaces Mobile;
- em [7], uma caixa de seleção que permite ativar ou desativar o modo [debug]. Este modo é indicado pela presença do quadro [8], que exibe o modelo da vista atual;
- em [9], um tempo de espera artificial em milissegundos. O valor padrão é 0 (sem espera). Se N for o valor desse tempo de espera, qualquer ação do utilizador será executada após um tempo de espera de N milissegundos. Isto permite-lhe ver a gestão de espera implementada pela aplicação;
- em [10], o URL do servidor Spring 4. Com base no que precedeu, este é [http://localhost:8080];
- em [11] e [12], o nome de utilizador e a palavra-passe do utilizador que pretende utilizar a aplicação. Existem dois utilizadores: admin/admin (login/palavra-passe) com uma função (ADMIN) e user/user com uma função (USER). Apenas a função ADMIN tem permissão para utilizar a aplicação. A função USER é incluída exclusivamente para demonstrar a resposta do servidor neste caso de utilização;
- em [13], o botão que permite ligar-se ao servidor;
- em [14], o idioma da aplicação. Existem dois: francês (padrão) e inglês.
![]() |
- em [1], faz o login;
![]() |
- depois de iniciar sessão, pode escolher o médico com quem deseja marcar uma consulta [2] e a data da consulta [3];
- Em [4], solicita a visualização da agenda do médico selecionado para o dia escolhido;
![]() |
- Assim que a agenda do médico for apresentada, pode marcar um horário [5];
![]() |
- Em [6], selecione o paciente para a consulta e confirme a sua seleção em [7];
![]() |
Assim que a consulta for confirmada, será automaticamente redirecionado para a agenda, onde a nova consulta já estará listada. Esta consulta pode ser eliminada posteriormente [7].
As principais funcionalidades já foram descritas. São simples. As que não foram descritas são funções de navegação para regressar a uma visualização anterior. Vamos concluir com as definições de idioma:
![]() |
- em [1], pode alternar do francês para o inglês;
![]() |
- em [2], a visualização muda para inglês, incluindo o calendário;


















