image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
José Ferreira
José Ferreira27/02/2025 23:41
Compartilhe

De Ada ao Java no Desenvolvimento Web: Como os Frameworks Potencializam sua Aplicação

  • #Spring
  • #Java
  • #Quarkus

Introdução  

A história da programação em Java não se resume apenas ao avanço tecnológico, mas também das necessidades e mudanças ocorrentes na sociedade com o passar do tempo, principalmente em automatizar cálculos e processos. No início os computadores eram programados diretamente em linguagem de máquina 

A primeira percussora nesse campo foi Ada Lovelace, que trabalhou conceitos essenciais para o caminho da programação na qual conhecemos hoje. 

  image

Mas essas linguagens eram muito complicadas e exigiam um conhecimento profundo da arquitetura da computação. 

Ao longo das décadas seguintes, novas linguagens, tecnologias, trouxeram conceitos inovadores como a programação orientada a objetos, revolucionando a forma como os sistemas tinham seu desenvolvimento. 

Foi nesse contexto que em 1995, a sun Microsystems lançou o que conhecemos hoje como a linguagem “mais conhecida no mundo todo “, o Java. Uma linguagem projetada para ser robusta, segura e acima de tudo, independente de plataforma, seguindo seu lema "Write Once, Run Anywhere" (escreva uma vez, execute em qualquer lugar) tornando assim o Java como uma escolha popular para diversas aplicações, desde softwares mais simples até corporativos e sistemas embarcados. 

A década de 90 foi um divisor de águas, uma grande transformação. Enquanto o filme Matrix (1999) explorava a relação entre humanos e máquinas, a linguagem Java dava seus primeiros passos rumo ao sucesso. 

image

O Poder do Java no Desenvolvimento Web e Além 

Desde sua criação, o Java se consolidou como uma das linguagens de programação mais versáteis e amplamente utilizadas no mundo. Sua capacidade de ser executado em diferentes plataformas, graças à máquina virtual Java (JVM), tornou-a a escolha ideal para diversas aplicações, desde desenvolvimento web até inteligência artificial e Internet das Coisas (IoT). 

Com sua portabilidade, segurança e robustez, Java é encontrado em diversos setores da tecnologia, incluindo: 

  1. 📱 Aplicativos Móveis – A maioria dos aplicativos móveis, especialmente no ecossistema Android, são desenvolvidos com Java. Sua estabilidade e suporte a bibliotecas poderosas fazem dele a linguagem preferida para aplicativos como Spotify, Signal e Cash App, que exigem alto desempenho e confiabilidade. 
  2. 🌐 Aplicações Web – No mundo digital, Java desempenha um papel fundamental na construção de aplicações web escaláveis. Plataformas como Twitter e LinkedIn utilizam frameworks Java, como Spring Boot e Jakarta EE, para fornecer serviços robustos a milhões de usuários diariamente. 
  3. 🏢 Software Empresarial – Empresas precisam de sistemas confiáveis para gerenciar processos complexos, como faturamento, logística e recursos humanos. A escalabilidade e a segurança do Java fazem dele a escolha ideal para softwares corporativos, como sistemas de gestão de cadeia de suprimentos e plataformas financeiras. 
  4. 🔗 Internet das Coisas (IoT) – O Java está presente em dispositivos inteligentes, como TVs, carros conectados e equipamentos industriais, devido à sua flexibilidade e portabilidade. Aplicações de IoT frequentemente usam Java para garantir compatibilidade entre diferentes dispositivos e sistemas. 
  5. 🎮 Desenvolvimento de Jogos – Java também tem presença no mundo dos jogos. O icônico Minecraft e o clássico RuneScape são exemplos de títulos desenvolvidos com Java, aproveitando sua capacidade multiplataforma e sua forte comunidade de desenvolvedores. image

O Papel dos Frameworks no Desenvolvimento Web

Ao falar sobre Java no desenvolvimento web, um conceito essencial entra em cena: os frameworks. Mas afinal, o que é um framework e por que ele é tão importante? 🤔 

Frameworks: Construindo Software com Eficiência 

Imagine que você precisa montar um armário. Você tem duas opções: 

  1. 🔨 Fazer tudo do zero – Comprar a madeira, cortar as peças, lixar, pintar, comprar pregos, dobradiças e montar peça por peça. Isso exige tempo, conhecimento e esforço
  2. 📦 Usar um kit pronto – Você adquire um armário pré-fabricado, com todas as peças já cortadas, furadas e organizadas, além de um manual de instruções. Basta seguir os passos e montá-lo rapidamente. 

➡️ Os frameworks funcionam como esse kit de montagem! Eles fornecem bibliotecas, estruturas e ferramentas prontas para que você não precise programar tudo do zero

No desenvolvimento web, frameworks como Spring Boot e Jakarta EE já trazem recursos essenciais, como gerenciamento de banco de dados, segurança e autenticação, permitindo que os desenvolvedores foquem no que realmente importa: a lógica da aplicação e a experiência do usuário

O principal propósito de um framework é facilitar o trabalho dos desenvolvedores, reduzindo o tempo e o esforço necessários para criar uma aplicação. Ele permite reutilizar soluções já prontas, eliminando a necessidade de escrever código do zero para tarefas repetitivas e comuns. Isso não apenas acelera o desenvolvimento, mas também contribui para a redução de erros e a produção de um código mais organizado e legível. Além disso, frameworks são altamente reutilizáveis, podendo ser aplicados em diversos projetos com eficiência. 

Agora que entendemos o papel dos frameworks, vamos explorar como Java e seus principais frameworks impulsionam o desenvolvimento web moderno

Assim como montar um armário é necessário colocar as mãos em pratica, vamos começar com um exemplo prático. Aqui veremos um código demonstrando um servlet tradicional em relação ao feito com um framework:

  • Servlet Puro sem Framework 
@WebServlet("/hello") 

public class HelloServlet extends HttpServlet { 
  protected void doGet(HttpServletRequest request, HttpServletResponse response)  

    throws ServletException, IOException { 
      response.getWriter().write("Hello, Java Web!"); 

  } 

} 

Explicação: 

  • @WebServlet("/hello"): Esse é um exemplo de configuração usando anotações (com o Servlet 3.0), onde mapeamos o servlet para a URL /hello. O método doGet é chamado quando uma requisição HTTP GET é feita para esse caminho. 
  • HttpServletRequest e HttpServletResponse: São objetos que representam a requisição e a resposta HTTP. Com o HttpServletRequest, podemos acessar dados da requisição, como parâmetros, cabeçalhos e corpo. O HttpServletResponse é usado para enviar a resposta ao cliente. 
  • response.getWriter().write("Hello, Java Web!"): Essa linha escreve a mensagem "Hello, Java Web!" na resposta HTTP que será enviada ao cliente. 

Como funciona: 

  • Quando o servidor recebe uma requisição GET para /hello, o método doGet é executado e a resposta será "Hello, Java Web!". 
  • Note que, nesse modelo, temos que cuidar de toda a configuração de servlets, mapeamento de URLs e responder manualmente. 

No segundo exemplo, temos a mesma funcionalidade, mas utilizando o framework Spring Boot: 

  • Com Framework (Spring Boot) 
@RestController 
@RequestMapping("/api") 

public class HelloController { 
  @GetMapping("/hello") 

  public String hello() { 

      return "Hello, Java Web with Spring Boot!"; 
  } 

} 

Explicação: 

  • @RestController: Essa anotação indica que a classe é um controlador onde todos os métodos retornam dados diretamente como resposta (não como páginas HTML). No Spring Boot, @RestController combina @Controller e @ResponseBody, ou seja, os dados retornados são diretamente escritos na resposta HTTP. 
  • @RequestMapping("/api"): Mapeia a URL base para o controlador. Todos os métodos dentro dessa classe estarão sob o caminho /api. 
  • @GetMapping("/hello"): Mapeia o método hello() para uma requisição GET na URL /api/hello. É uma forma simplificada de usar @RequestMapping(method = RequestMethod.GET). 
  • String hello(): O método hello() retorna uma string que será automaticamente convertida para a resposta HTTP, devido ao Spring Boot. 

Como funciona: 

  • O Spring Boot configura o servidor para você e simplifica a criação de controladores HTTP. 
  • O Spring Boot também cuida de grande parte da configuração e inicialização do aplicativo, o que torna o desenvolvimento muito mais rápido e fácil. 
  • Você não precisa se preocupar com a configuração do servlet, como no exemplo anterior. Basta definir controladores e métodos, e o Spring Boot cuida do resto. 

A nivel comparativo, o Ser Servlet Puro você tem mais controle sobre a configuração, mas isso também exige mais esforço manual para definir cada detalhe (como o mapeamento de URLs, inicialização do servidor, etc.) e quanto ao Spring Boot simplifica muito a configuração e a criação de APIs. Usando anotações como @RestController, @RequestMapping e @GetMapping, você consegue escrever menos código e focar na lógica de negócio. 

Principais Frameworks Java para Desenvolvimento Web 

Spring Boot

Podemos começar falando de um framework recentemente visto, o Spring boot e também o mais popular para microsserviços. O Spring Boot é uma ferramenta que faz parte do ecossistema Spring, focada na simplificação do desenvolvimento de aplicações Java, principalmente em ambientes corporativos. Ele foi criado para eliminar a necessidade de configurações complexas e repetitivas, permitindo que os desenvolvedores construam rapidamente aplicativos prontos para produção, com mínima configuração manual.

Principais caracterÍsticas do Spring Boot 
  1. Autoconfiguração: O Spring Boot tenta, automaticamente, configurar sua aplicação com base nas dependências que você incluiu no projeto. Isso significa que você não precisa perder tempo configurando o servidor web, bancos de dados ou outras ferramentas do zero.
  2. Standalone: O Spring Boot cria aplicativos autossuficientes, ou seja, ele já inclui um servidor embutido (como Tomcat, Jetty ou Undertow), tornando desnecessário configurar um servidor externo. Isso facilita o processo de implantação e reduz a complexidade de configuração.
  3. Produção Pronta: O Spring Boot tem suporte integrado para métricas, monitoramento, configuração externa e outros recursos essenciais para manter e operar aplicações em produção.
  4. Microserviços: Ele é ideal para construir aplicações baseadas em microserviços, pois facilita a criação de serviços independentes que podem ser escalados e mantidos de forma isolada.
  5. Minimalismo de Configuração: A configuração por padrão do Spring Boot é feita através de convenções, ao invés de configurações explícitas. Isso significa que o desenvolvedor tem que se preocupar com menos detalhes de infraestrutura.
  6. CLI (Command Line Interface): O Spring Boot também oferece uma interface de linha de comando (CLI) que pode ser usada para testar e rodar pequenos projetos de forma rápida e eficiente, o que ajuda especialmente durante o desenvolvimento e testes.
Como Iniciar com Spring Boot

Para iniciar com Spring Boot, basta criar um novo projeto em seu IDE favorito (como IntelliJ IDEA ou Eclipse), adicionar as dependências necessárias (via Spring Initializr ou gerenciadores de dependência como Maven ou Gradle) e começar a desenvolver. A seguir, um exemplo simples de uma aplicação Spring Boot que expõe um endpoint RESTful:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class Application {
public static void main(String[] args) {
  SpringApplication.run(Application.class, args);
}
}

@RestController
class HelloWorldController {
@GetMapping("/hello")
public String sayHello() {
  return "Hello, World!";
}
}

Quarkus: O Framework Java para Nuvem e Microserviços

O Quarkus é um framework Java focado em otimizar o desenvolvimento de aplicações para a nuvem e microserviços. Com uma abordagem de desempenho e baixa utilização de recursos, ele é ideal para ambientes de contêineres, como o Kubernetes, e oferece suporte nativo a tecnologias como GraalVM para criação de executáveis nativos, o que resulta em tempos de inicialização extremamente rápidos e baixo consumo de memória.

Principais Características do Quarkus
  1. Desempenho Otimizado: O Quarkus é projetado para proporcionar um tempo de inicialização rápido e um uso reduzido de memória, características essenciais para microserviços e aplicações nativas na nuvem.
  2. Compatibilidade com Eclipse MicroProfile: O Quarkus oferece suporte completo para as especificações do Eclipse MicroProfile, que define um conjunto de APIs para ajudar na criação de microserviços em Java.
  3. Suporte a GraalVM: GraalVM permite compilar aplicativos Java em executáveis nativos, o que reduz ainda mais o tempo de inicialização e o uso de memória, além de melhorar o desempenho.
  4. Desenvolvimento Reactivo: O Quarkus facilita a criação de aplicações reativas com Vert.x, permitindo a construção de sistemas altamente escaláveis e resilientes.
  5. Extensões: O Quarkus conta com um ecossistema de extensões para integração com uma série de tecnologias, como bancos de dados, mensageria, APIs REST, segurança, entre outras, o que torna mais fácil adicionar novas funcionalidades ao projeto.
Aplicação simples com Quarkus

Aqui está um exemplo de uma simples aplicação Quarkus expondo um endpoint RESTful:

import org.eclipse.microprofile.openapi.annotations.OpenAPIDefinition;
import org.eclipse.microprofile.openapi.annotations.info.Info;
import javax.ws.rs.GET;
import javax.ws.rs.Path;


@OpenAPIDefinition(info = @Info(title = "Hello API", version = "1.0"))
@Path("/hello")
public class HelloWorldResource {
  @GET
  public String sayHello() {
      return "Hello, Quarkus!";
  }
}

Jakarta EE: A Evolução do Java EE para Microserviços e Nuvem

O Jakarta EE é o sucessor do Java EE (Enterprise Edition), uma plataforma de desenvolvimento para aplicações corporativas robustas e escaláveis. Com a mudança para a Eclipse Foundation, o Jakarta EE deu um grande passo em direção a um modelo mais ágil e moderno, com foco em microserviços, nuvem e desempenho.

Principais Características do Jakarta EE
  1. Padrões e APIs Amplamente Utilizados: Jakarta EE inclui um conjunto de especificações amplamente utilizadas no desenvolvimento de aplicações empresariais, como Servlets, JPA (Java Persistence API), EJB (Enterprise JavaBeans), JMS (Java Message Service), JAX-RS (Java API for RESTful Web Services), entre outros.
  2. Foco em Microserviços: Jakarta EE oferece uma estrutura que é altamente compatível com arquiteturas de microserviços, oferecendo funcionalidades como CDI (Contexts and Dependency Injection), RESTful APIs e integração com contêineres como o Kubernetes.
  3. Completamente Open Source: Desde sua transferência para a Eclipse Foundation, o Jakarta EE tem evoluído como uma plataforma totalmente aberta, com uma comunidade ativa e contribuindo para o seu crescimento contínuo.
  4. Compatibilidade com Cloud-Native: Jakarta EE é totalmente compatível com práticas de desenvolvimento modernas e é altamente otimizado para o desenvolvimento de aplicações em ambientes de nuvem.
  5. Ecosistema de Implementações: Jakarta EE tem várias implementações como Payara, WildFly e Open Liberty, oferecendo diferentes opções de servidores de aplicação para rodar suas aplicações.
Aplicação simples com Jakarta EE
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 

@Path("/hello") 
public class HelloWorldEndpoint { 
  @GET 
  public String sayHello() { 
      return "Hello, Jakarta EE!"; 
  } 
}

Como escolher o melhor framework para o desenvolvimento?

Embora cada framework — Spring Boot, Quarkus e Jakarta EE — tenham características e vantagens únicas, a escolha do melhor framework depende das necessidades específicas do projeto, como desempenho, escalabilidade, complexidade e requisitos do ambiente de execução. Portanto, é essencial considerar esses fatores ao decidir qual delas utilizar em seu desenvolvimento.

Aqui vai um comparativo dentre esses frameworks detalhando pontos de cada um expecificamente:

Spring Boot

  1. Facilidade de Configuração: Alta (configuração automática)
  2. Desempenho: Moderado
  3. Microserviços: Excelente (suporte nativo)
  4. Ecossistema: Extensa comunidade e suporte
  5. Execução em Containers/Serverless: Bom (suporte a Docker e Kubernetes)

Jakarta EE

  1. Facilidade de Configuração: Moderada (configuração manual)
  2. Desempenho: Excelente (tempo de inicialização rápido)
  3. Microserviços: Bom (mas requer mais configuração)
  4. Ecossistema: Baseado em padrões corporativos
  5. Execução em Containers/Serverless: Bom (mas não é tão otimizado)

Quarkus

  1. Facilidade de Configuração: Alta (foco em simplicidade)
  2. Desempenho: Bom (dependendo da implementação)
  3. Microserviços: Excelente (suporte nativo e otimização para containers)
  4. Ecossistema: Focado em microserviços e serverless
  5. Execução em Containers/Serverless: Excelente (compilação nativa)

Conclusão: A Jornada dos frameworks e o Legado de Ada lovelace

Ao longo deste artigo, exploramos a importância dos frameworks no desenvolvimento de software. Como vimos, frameworks como Spring Boot, Jakarta EE e Quarkus oferecem uma estrutura robusta e ferramentas prontas para uso, economizando tempo e esforço dos desenvolvedoressem a necessidade de reinventar a roda o tempo todo.

Portanto, assim como Ada Lovelace pavimentou o caminho para a programação moderna, os frameworks de hoje pavimentam o caminho para o desenvolvimento rápido e eficiente. Podemos agora construir sobre as estruturas que ela ajudou a iniciar, aproveitando o poder das tecnologias modernas para criar soluções complexas de forma mais simples e ágil.

Referências e Links Úteis

Documentações:

Cursos e tutariais para auxilio:

Obrigado a todos pela atenção, espero que gostem!

Compartilhe
Recomendados para você
Deal - Spring Boot e Angular (17+)
Cognizant - Arquitetura com Spring Boot e Cloud
Claro - Java com Spring Boot
Comentários (0)