Minha 1ª experiência com Java Spring Boot
Esse post vai ser meio que um Diário de Bordo, por assim dizer. Meu objetivo é descrever o passo a passo que usei nesse meu primeiro contato com o framework Spring Boot do Java. Aqui eu quero comentar sobre as pesquisas que precisei fazer, as dificuldades, minhas impressões no decorrer do processo etc. Acompanha aí que vai ser legal!😅
Tá, Jeff, o que você tentou fazer exatamente?
Eu queria entender como funcionam aplicativos web em Java. Sendo assim, comecei dando aquela googlada básica em busca algo que me desse um norte. Foi aí que descobri o Spring Boot, um framework do Java usado pra esse fim. Vi que ele é o mais "famosinho" entre as ferramentas pra desenvolvimento web, por isso decidi tentar com ele.
Comecei caçando a documentação do coiso e achei esse tutorialzinho Spring Quickstart Guide. Isso aqui me deu uma base de como criar o esqueleto do projeto com a configuração básica.
Achei bem fácil iniciar o projeto usando o Spring Initializr, a gente define a linguagem de programação a ser usada (Java, Kotlin, Groovy), a versão do Java, o compilador (Maven ou Gradle), o tipo de pacote se vai ser JAR ou WAR, entre outras configuração. Tudo isso na mesma página!
Depois de preencher esse formulário, o Spring Initializr gera um arquivo zipado pra você baixar, contendo o projeto já certinho. Maior mágica da hora, mano!
Beleza, mas como faz pra rodar o projeto?
No meu caso, eu estou usando o Visual Studio Code para trabalhar, daí ele tem um recurso bastante simples para pôr esse trem nos trilhos. Entre os ícones à esquerda nós temos o Run and Debug, onde podemos Rodar e Debugar o rolê com apenas alguns cliques!
Feito isso, o Terminal Integrado do VS Code vai iniciar, e agora você pode acessar a página inicial do projeto web. Por padrão o Spring Boot utiliza a porta 8080, sendo assim podemos acessar http://localhost:8080/ para acessar.
E como esse projeto foi estruturado?
Minha intenção foi criar um pequeno site com informações sobre os desafios de programação da Star Code, uma comunidade no Discord focada em tecnologia (a melhor de todas!).
Eu organizei as rotas em duas controllers principais: HomeController e DesafiosController. Para tanto, precisei googlar outra vez e encontrei a página Handling Form Submission. Baseado nela, utilizei um recurso do Spring Boot para definir rotas, a notação @GetMapping(). Se liga como a classe ficou:
@Controller
public class HomeController {
@GetMapping("/")
public String home(Model model) {
model.addAttribute("Desafios", ListarDesafio());
return "home";
}
}Como você pode ver, o método home(Model model) será acionado quando a rota "/" for acessada, ou seja, a página inicial do site. Além disso, temos o objeto model, que é usado para trafegar dados entre a controller e a view (caso você ainda não saiba o que é uma view, por ora entenda isso como um arquivo HTML). E, por fim, temos como retorno uma string ("home"), que refere-se ao nome da view que esta controller deve renderizar.
Me fala mais sobre essa tal de view
O HTML do projeto foi feito com Bootstrap e Thymeleaf. Para entender como funciona esse último, dei uma olhada na documentação do bicho. Achei meio enrolado de mexer com o Thymeleaf, porque ele adiciona uns códigos bem diferentões no HTML convencional que a gente tá acostumado. Mas, de qualquer forma, a documentação dele ajudou bastante.
<div class="container">
<h2 class="text-center" style="margin: 50px 0px 30px 0px">Desafios StarCode</h2>
<div class="row">
<div class="col-sm-3" th:each="desafio : ${Desafios}">
<div class="card" style="min-height: 250px;">
<div class="card-body">
<h5 class="card-title" th:text="${desafio.nome}"></h5>
<hr />
<p class="card-text" th:text="${desafio.descricao}"></p>
<a th:href="${desafio.url}" class="btn btn-primary">Detalhes</a>
</div>
</div>
</div>
</div>
</div>
A título de curiosidade, o código acima foi o que eu usei para fazer iterações na lista Desafios, afim de criar cards para cada desafio da lista. Digamos que o atributo th:each="desafio : ${Desafios}" seria equivalente a um for(Object desafio : Desafios) em Java. Além disso, temos também o atributo th:text="${variavel}", que imprime na tela o valor de variáveis.
No começo isso foi estranho, mas acho que estou começando a acostumar com essa sintaxe. Fora que, na dúvida, temos sempre a documentação pra consultar!
Legal, esse projeto já tá publicado?
Sim! Eu fiz a publicação utilizando a plataforma do Render. Para tanto, precisei dar uma estudada em Docker, mas isso é um tópico que não vai caber nesse post. Caso você queira saber mais detalhes de como fiz isso, tenho um outro post onde expliquei passo a passo esse rolê da publicação. Se quiser acessar, clica aqui!
O sitezinho publicado pode ser acessado clicando aqui, e ele ficou assim:
Enfim, era isso que eu queria mostrar. Como disse no início, esse post era mais um relato apresentando o passo a passo usado pra montar esse projeto. Mesmo assim, espero que esse texto te seja útil de alguma forma, seja pela indicação dos links que me ajudaram, seja pelo passo a passo em si.
Para você que chegou até aqui, te dou um litro de agradecimento! Até a próxima!
Comentários
Postar um comentário