Desenvolvimento Web com Java e Spring: Do Zero ao Deploy!
- #Java
Se você está começando no mundo do desenvolvimento web com Java e Spring, este artigo é para você!
Vamos construir juntos um projeto web simples, mas completo, dá configuração inicial até o deploy.
Ao final, teremos um aplicativo funcional e entenderemos os conceitos básicos do ecossistema Spring.
Tudo de um jeito simples e sem o bla bla blá de sempre.
Praticamente vou "segurar sua mão" o caminho todo.
O que vamos construir?
Vamos criar uma aplicação web simples: um Sistema de Gerenciamento de Tarefas (To-Do List).
Onde os usuários irão adicionar , listar, marcar ou remover tarefas.
Usaremos as seguintes tecnologias:
- Java (linguagem de programação).
- Spring Boot (framework para desenvolvimento web).
- Thymeleaf (para templates HTML).
- H2 Database (banco de dados em memória para facilitar o desenvolvimento).
- Maven (gerenciamento de dependências).
Configuração do Projeto
Acesse Spring Initializr pelo site https://start.spring.io/ e configure o projeto da seguinte forma:
- Project: Maven Project.
- Language: Java.
- Spring Boot: Escolha a versão estável mais recente.
- Dependencies:
- Spring Web (para criar endpoints REST).
- Thymeleaf (para renderizar páginas HTML).
- Spring Data JPA (para persistência de dados).
- H2 Database (banco de dados em memória).
Clique em Generate para baixar o projeto.
Abra o projeto na sua IDE favorita (IntelliJ IDEA, Eclipse, VS Code, etc.). A estrutura do projeto será algo assim:
src
├── main
│ ├── java
│ │ └── com
│ │ └── exemplo
│ │ └── todolist
│ │ └── TodoListApplication.java
│ └── resources
│ ├── static
│ ├── templates
│ └── application.properties
└── test
Criando a Entidade Tarefa
Vamos criar uma classe Tarefa que representará as tarefas no nosso sistema.
package com.exemplo.todolist.model;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Tarefa {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String descricao;
private boolean concluida;
// Getters e Setters
}
Criando o Repositório
Vamos usar o Spring Data JPA para criar um repositório que gerencie as operações de banco de dados.
package com.exemplo.todolist.repository;
import com.exemplo.todolist.model.Tarefa;
import org.springframework.data.jpa.repository.JpaRepository;
public interface TarefaRepository extends JpaRepository<Tarefa, Long> {
}
Criando o Controller
Agora, vamos criar um controller para gerenciar as requisições HTTP.
package com.exemplo.todolist.controller;
import com.exemplo.todolist.model.Tarefa;
import com.exemplo.todolist.repository.TarefaRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/tarefas")
public class TarefaController {
@Autowired
private TarefaRepository tarefaRepository;
@GetMapping
public String listarTarefas(Model model) {
model.addAttribute("tarefas", tarefaRepository.findAll());
return "lista-tarefas";
}
@PostMapping
public String adicionarTarefa(@RequestParam String descricao) {
Tarefa tarefa = new Tarefa();
tarefa.setDescricao(descricao);
tarefa.setConcluida(false);
tarefaRepository.save(tarefa);
return "redirect:/tarefas";
}
@PostMapping("/concluir/{id}")
public String concluirTarefa(@PathVariable Long id) {
Tarefa tarefa = tarefaRepository.findById(id).orElseThrow();
tarefa.setConcluida(true);
tarefaRepository.save(tarefa);
return "redirect:/tarefas";
}
@PostMapping("/remover/{id}")
public String removerTarefa(@PathVariable Long id) {
tarefaRepository.deleteById(id);
return "redirect:/tarefas";
}
}
Criando a Interface com Thymeleaf
Vamos criar um template HTML para exibir as tarefas.
Crie um arquivo lista-tarefas.html na pasta src/main/resources/templates:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Lista de Tarefas</title>
</head>
<body>
<h1>Lista de Tarefas</h1>
<form action="/tarefas" method="post">
<input type="text" name="descricao" placeholder="Nova tarefa" required>
<button type="submit">Adicionar</button>
</form>
<ul>
<li th:each="tarefa : ${tarefas}">
<span th:text="${tarefa.descricao}"></span>
<span th:if="${tarefa.concluida}"> (Concluída)</span>
<a th:href="@{/tarefas/concluir/{id}(id=${tarefa.id})">Concluir</a>
<a th:href="@{/tarefas/remover/{id}(id=${tarefa.id})">Remover</a>
</li>
</ul>
</body>
</html>
Configurando o Banco de Dados H2
No arquivo application.properties, adicione as configurações do H2:
spring.datasource.url=jdbc:h2:mem:todolist
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
Acesse o console do H2 em http://localhost:8080/h2-console para visualizar o banco de dados.
Executando o Projeto
Execute a aplicação executando a classe TodoListApplication.
Acesse http://localhost:8080/tarefas no navegador para ver a aplicação em ação.
Deploy no Render ou Railway
Render
- Crie uma conta no Render.
- Crie um novo serviço Web Service.
- Conecte o Render ao seu repositório GitHub.
- Configure o build e o start command:
- Build Command:
mvn clean install
- Start Command:
java -jar target/nome-do-seu-projeto.jar
Render fará o deploy automaticamente após o push no repositório.
Railway
- Crie uma conta no Railway.
- Crie um novo projeto e conecte ao GitHub.
- Adicione um novo serviço e selecione "Deploy from GitHub repo".
- Railway detectará automaticamente que é um projeto Java e fará o deploy.
Parabéns! Acabamos de criar uma aplicação web completa com Java e Spring, desde o desenvolvimento até o deploy.
Agora temos uma base sólida para explorar mais funcionalidades do Spring e construir projetos ainda mais complexos.
Vamos continuar praticando e explorando o ecossistema Java!
Comente ai o que achou e se conseguiu terminar sua aplicação.
Essa é a apenas a ponta do iceberg e ainda há muito a ser explorado!
Obrigado a todos que chegaram até aqui.
Para aprender java é muita mão na massa e muitos projetos praticos.
Então 'hands on' e não deixe de postar seu resultado!
Bons estudos.
Até...