https://grails.org/Quick+Start . Execute até antes da seção "Configure a Data Source (Optional)"
Navegue nos diretórios para ver o que foi gerado
Acesse a sua aplicação via browser e veja o que ele gerou
Entenda o fluxo da sua aplicação
Do browser até o controle, o que acontece?
Você percebeu que existe uma comunicação com o servidor utilizando o protocolo HTTP?
Quais são as mensagens HTTP que o browser mandou para o servidor?
Quais as mensagens que o servidor mandou pro browser?
Qual o conteúdo dessas mensagens?
Quem foi responsável por gerar o conteúdo das mensagens?
Crie uma página nova em branco e acesse via browser
Para fazer isso, você terá que aprender onde essa página deve ser colocada no servidor.
Agora mostre uma mensagem nessa página vinda do servidor
Agora crie um campo de texto e um botão, de forma que você digite uma mensagem, essa mensagem vá pro servidor e então transforma ela toda em maiúscula e devolve a resposta em outra página para o browser
Crie uma página com um campo de texto que você irá digitar uma lista de palavras separadas por virgulas
Você deve receber esse texto, separar cada palavra de acordo com as vírgulas, e gerar uma página onde cada palavra será exibida em uma lista e também em uma tabela.
Analise no Chrome (ctrl+shit+i) como a mensagem está indo para o servidor e como o servidor está retornando
A mensagem HTTP é um POST ou um GET? Qual a diferença entre eles?
Crie um outro método no seu controle que irá receber a mesma lista. Só que dessa vez, você não irá criar um formulário para enviar a lista e sim, o usuário irá digitar a lista na pŕopria barra de endereço do seu browser
Crie uma página que a pessoa digite o seu nome e será redirecionada para um outro formulário que irá pedir a idade dele. Depois do segundo formulário, você deve exibir em uma terceira página o nome e a idade dele.
Como guardar os dados enviados pelo usuário de forma persistente:
Utilizando sessões
Utilizando bando de dados
MySQL
O que é uma tabela
Listando as instâncias de uma tabela com o comando SELECT
Inserido uma nova instância a tabela com o comando INSERT
Atualizando os dados de um instância com o comando UPDATE
Apagando uma instância com o comando DROP
O que é CRUD?
O que é GORM
Mapeando uma tabela
Utilizando o GORM para pegar uma instância no banco através de seu id.
Utilizando o GORM para lista todos as instâncias de uma tabela
Utilizando o GORM para inserir uma nova instância a tabela
Utilizando o GORM para deletar uma instância.
Crie 4 páginas para realiziar as quatro operações do CRUD para uma biblioteca
Crie um formulário para adicionar um novo livro
Crie uma página para listar todos os livros
Crie uma página para exibir todas as informações de um livro. Você chegará nessa página clicando em um livro da listagem.
Crie uma página para editar um determinado livro. O livro será escolhido a partir da listagem de livros.
Na página da lista de livros, o usuário terá um link com uma opção para remover o livro.
Faça uma página que permita buscar os livros cadastrados de acordo com o seu título. Os resultados devem ser mostrados em outra página.
Agora mude a sua busca para que a cada letra digitada o sistema já irá buscando pelos livros e mostrando os livros encontrados na mesma página, sem recarregar.
Na página de detalhes de um livro, coloque uma opção para que o usuário possa adicionar um comentário para o livro. Vários comentários poderão ser adicionados. Você deve exibir os comentários na mesma página e também sem recarregar.
Faça um formulário e receba no servlet como um POST
Faça validação nesse formulário, tanto no cliente como no servidor
Trilha persistência. Parte 1
Crie algumas entidades no seu projeto web do servlet e salve-as no banco de dados usando JDBC puro.
Faça alguns formulários para criar essas entidades
Contrua listagens e edições dessas entidades (não precisam ser muitas entidades)
Crie entidades que se relacionam. Por exemplo: Turma e Aluno, onde uma turma possui muitos alunos
Triha persistência. Parte 2
Troque a sua persistência da aplicação anterior pelo hibernate
Trilha WEB parte 2
Construa algumas chamadas assíncronas para o servidor utilizando AJAX. Faça tanto o GET como o POST
Depois de realizar o passo anterior, troque os seus servlets por um framework que já facilita a implementação de serviços: Jersey. Lembre-se só execute essa etapa depois de concluir o passo anterior
Trilha WEB parte 3
Troque a sua parte de interface com o usuário pelo AngularJS
Trilha WEB parte 3
Como estamos usando o grails aqui, troque toda a sua camada de aplicação pelo grails e integre com a sua interface em AngularJS
Pronto ... agora você pode começar a trabalhar no código conosco :-)