Desenvolvimento Web com Java: do Yahoo! a IA, uma evolução da linguagem através dos tempos.
1 Introdução
Hoje temos o desenvolvimento Web com Java como fundamental para criação de aplicações que tenham robustez, fácil manutenção, escalabilidade e flexibilidade. O que segue o objetivo de James Gosling, Mike Sheridan e Patrick Naughton, ao criar a linguagem em 1991, para empresa Sun Microsystems – comprada em 2010 pela Oracle –, que queriam uma linguagem simples, segura, portátil e capaz de rodar em diferentes plataformas.
Com o surgimento da necessidade da introdução de tecnologias que permitem a construção de aplicações distribuídas e dinâmicas, o desenvolvimento Web com Java se popularizou. Esse desenvolvimento passou por diversas fases ao longo das décadas, com a evolução da tecnologia da linguagem sendo influenciada por mudanças no design de websites, no surgimento de novas ferramentas de desenvolvimento e nas necessidades de interatividade na web.
Porém, qual a importância de aprender a história do desenvolvimento Web com Java? Entendo a evolução da linguagem e sua aplicabilidade, ajuda aos programadores mais jovens a compreender como surgiram recursos aplicados na atualidade e a importância de cada um deles.
Sendo assim, o artigo busca explorar a evolução do desenvolvimento web com Java da década de 90 até os dias atuais, fomentando a importância da arquitetura e das boas práticas para o desenvolvimento Web com Java e destacando sites famosos que utilizaram Java ao longo das décadas
2 Anos 90 – assim caminha a Web e o Java com passos decididos e com coragem
A história do surgimento da World Wide Web (WWW), ou simplesmente Web, está fortemente ligado a criação da linguagem Java, visto que, a segunda trouxe interatividade e dinamismo para a primeira, permitindo que fossem criados animações, gráficos interativos e jogos simples para Web, recursos que não eram possíveis com as tecnologias daquela época, como HTML e JavaScript.
Isso ocorreu devido ao desenvolvimento da tecnologia Java Applet, que era especificamente usada para criar aplicações interativas que podem ser embutidas em páginas web, rodando dentro de um navegador, carregados através de um plugin Java Runtime Environment (JRE).
Durante a década de 1990, a arquitetura das aplicações web com Java ainda estava engatinhando, com poucas práticas e ferramentas estabelecidas. Mas alguns grandes sites utilizaram a nova tecnologia para implementar suas aplicações, dentre eles temos:
- Yahoo! (1994): foi um dos primeiros grandes portais da web, com recursos de pesquisa, notícias e e-mail. Utilizou Java em várias partes de sua plataforma para facilitar funcionalidades dinâmicas e interatividade.
- Amazon (1995): A primeira versão da Amazon utilizava Java para suas funcionalidades iniciais, como a pesquisa de produtos e o mecanismo de recomendação.
- Netflix (1997): iniciou suas operações no final dos anos 90, evoluindo suas funções com uso de Java como parte fundamental de sua infraestrutura, especialmente para comunicação entre servidores e usuários.
3 Anos 2000 – As muitas camadas do ano 2000
As camadas estavam em alta nos anos 2000, nos cabelos, nas roupas e na arquitetura de desenvolvimento Web, com o surgimento da Layered Architecture ou Arquitetura em Camadas, no português. Essa evolução começou ainda em 1999, com o lançamento do Java 2 Platform, Enterprise Edition (J2EE), que se tornou o padrão para o desenvolvimento de aplicações empresariais baseadas em Java. Ele incluía várias tecnologias como Enterprise JavaBeans (EJB), JSP e Servlets, que permitiram a criação de aplicações distribuídas, escaláveis e seguras. A adoção do EJB ajudou a abstrair grande parte da complexidade do desenvolvimento de aplicações web e distribuídas, tornando o processo de desenvolvimento mais acessível.
A arquitetura em camadas foi uma das principais abordagens adotadas no desenvolvimento de aplicações web com Java nos anos 2000, ela dividia a aplicação em diferentes camadas, como:
· Camada de Apresentação: Usando JSP (Java Server Pages) ou Servlets para lidar com a interface do usuário.
· Camada de Negócio: Onde a lógica de negócios é implementada, frequentemente com EJB (Enterprise JavaBeans).
· Camada de Persistência: Usando tecnologias como JDBC (Java Database Connectivity) para se comunicar com o banco de dados.
Essa arquitetura ajudava a isolar responsabilidades e facilitava a manutenção de sistemas grandes e complexos.
Em 2003 houve mais um salto na arquitetura Web, com Spring Framework, criado por Rod Johnson, um dos frameworks mais importantes para o desenvolvimento de aplicações Java. O Spring simplificou o desenvolvimento, oferecendo recursos como Injeção de Dependência (DI), AOP (Aspect-Oriented Programming) e abstração de persistência, além de suporte à criação de microsserviços. Isso permitiu a evolução da arquitetura de camadas, como a implementação de padrões como MVC (Model-View-Controller, oferecendo uma abordagem mais flexível para a camada de apresentação.
A Sun Microsoft em 2006, renomeou o J2EE para Java EE (Enterprise Edition) para refletir o amadurecimento e a evolução da plataforma. A mudança de nome também visava indicar que a plataforma era mais flexível, moderna e estava alinhada com as melhores práticas de mercado. Dando mais um passo para evolução da arquitetura no desenvolvimento Web, culminando em aplicações web ainda mais sofisticadas, impulsionando a Web 2.0, onde a interatividade e o conteúdo dinâmico se tornaram essenciais.
Vários sites aproveitaram essa estratificação para criação de sites com interação ativa dos usuários, alguns exemplos:
- LinkedIn (2003): utilizava Java para seu sistema de backend, no início da sua trajetória e permanece a usar a linguagem para a infraestrutura de seu backend até hoje.
- Gmail (2004): usava e Java para garantir uma interface dinâmica e eficiente.
- Twitter (2006): começou com uma infraestrutura que incluía o uso de Java para gerenciar parte de sua base de dados e interações de usuários.
Fig. 2 – Representação do funcionamento de uma aplicação em Arquitetura em camadas.
4 Anos 2010 – Cada um no seu quadrado, ou melhor no seu contêiner
A década de 2010 foi marcada por transformações profundas na maneira como as aplicações web eram desenvolvidas, com o avanço das arquiteturas de microsserviços e o uso crescente de contêineres para orquestrar sistemas complexos. A partir dessa década, a web se tornou mais dinâmica e descentralizada, impulsionada pela necessidade de escalabilidade e flexibilidade em grandes sistemas. O Java, como sempre, foi uma das linguagens que mais se adaptou a essas novas demandas, com o surgimento de ferramentas como Spring Boot e Docker, que tornaram mais ágil o desenvolvimento e a implantação de microsserviços.
A arquitetura de microsserviços transformou a maneira como as aplicações eram construídas e escaladas. Em vez de uma única aplicação monolítica, agora cada funcionalidade poderia ser criada e implantada de forma independente. Cada micro-aplicação é responsável por uma parte específica do sistema, comunicando-se com outras através de APIs REST ou mensageria, como Kafka ou RabbitMQ.
O Spring Boot se tornou uma das principais ferramentas para a implementação de microsserviços com Java. Ele simplifica a configuração e o desenvolvimento de micro-aplicações, permitindo que os desenvolvedores se concentrem na lógica de negócios e não em configurações complexas.
Com o aumento do uso de microsserviços, tornou-se necessário um sistema para orquestrar e gerenciar esses serviços e assim surgiu a arquitetura de contêiners. O Docker e o Kubernetes tornaram-se indispensáveis para facilitar a execução de microserviços em contêineres. O Docker permite empacotar cada micro-serviço em um contêiner isolado, enquanto o Kubernetes permite a orquestração desses contêineres, facilitando a escalabilidade e a implantação contínua das aplicações.
Em paralelo ao crescimento dos microsserviços, a arquitetura baseada em eventos também se tornou popular. Essa arquitetura usa eventos assíncronos para a comunicação entre os microsserviços, permitindo um fluxo de dados eficiente e sem bloqueios. Isso foi impulsionado pela utilização de ferramentas de mensageria como Kafka, que ajudam a garantir a entrega de mensagens entre sistemas de forma eficiente e escalável.
Fig.3 – Diferença entre estrutura monolítica e estrutura de microsserviços.
Com a facilidade de ter cada coisa em seu lugar, alguns sites aproveitaram para usar essa nova aplicação, temos como exemplo:
- Uber (2010): A infraestrutura do Uber, que cresce rapidamente em termos de usuários e dados, utiliza microsserviços para manter a escalabilidade e a agilidade. Java tem sido utilizado em diversas partes dessa arquitetura, principalmente no backend de suas operações.
- Airbnb (2010): Com uma base de usuários global, o Airbnb optou pela arquitetura de microsserviços para gerenciar seu sistema de forma eficiente. Java foi uma das linguagens utilizadas para criar e manter esse modelo de arquitetura distribuída.
5 Anos 2020 - Tá na Nuvem, sei lá que Nuvem!
Nos anos 2020, a evolução do desenvolvimento web com Java foi profundamente influenciada pela nuvem e suas múltiplas possibilidades. Se antes o conceito de "nuvem" era um tanto abstrato, na década de 2020 ele se consolidou como uma das maiores transformações da indústria de tecnologia. E, como diz o meme da Dilma, "Tá na Nuvem, sei lá que Nuvem!", essa era a sensação para muitos ao ver as plataformas e arquiteturas baseadas na nuvem surgirem como o futuro do desenvolvimento de software.
A nuvem passou a ser mais do que um lugar para armazenar dados – ela se tornou o centro da inovação em escalabilidade, integração contínua e agilidade no desenvolvimento. E a linguagem Java, sempre adaptável, não ficou para trás. Com sua robustez, o Java acompanhou as mudanças, oferecendo soluções para construir aplicações web modernas, escaláveis e que atendem às novas demandas do mercado.
A grande tendência da década de 2020 foi a arquitetura serverless (sem servidor). O conceito de "sem servidor" parecia um contrassenso no começo, mas na prática ele significou uma verdadeira revolução. Com plataformas como AWS Lambda, Google Cloud Functions e Azure Functions, desenvolvedores passaram a criar e executar código sem precisar gerenciar a infraestrutura de servidores.
Com a nuvem se tornando o ponto de partida para o desenvolvimento de aplicações dinâmicas, frameworks como Spring Cloud trouxeram suporte para arquiteturas serverless em Java. A construção de microserviços altamente escaláveis, se tornou mais prático e executável. A promessa de elasticidade e escalabilidade infinita foi uma das maiores vantagens dessa arquitetura, permitindo que os desenvolvedores não precisassem mais se preocupar com a infraestrutura subjacente.
A nuvem trouxe também uma revolução no gerenciamento e orquestração de microserviços no uso de contêiners. No contexto Java, isso significou que as aplicações podiam ser empacotadas em contêineres e facilmente distribuídas e escaladas de forma automatizada.
Com a utilização de Kubernetes na nuvem, foi possível gerenciar facilmente as aplicações Java que precisavam escalar horizontalmente, sem se preocupar com a infraestrutura subjacente. As plataformas de cloud computing como AWS, Google Cloud e Azure ofereceram integração nativa com Kubernetes, facilitando a orquestração de microserviços baseados em Java, com benefícios como maior disponibilidade, menor latência e uma gestão mais eficiente dos recursos.
Outra tendência importante dos anos 2020 foi a adoção da arquitetura de micro frontends, devido ao aumento da complexidade das aplicações web. Assim como no conceito de microserviços, a ideia de micro frontends propõe dividir a interface de usuário de uma aplicação em partes independentes, cada uma com seu próprio ciclo de vida e desenvolvimento.
Esses módulos de frontend se comunicam com as APIs Java no backend (geralmente construídas com Spring Boot) para fornecer a experiência de usuário final. Essa abordagem oferece escalabilidade e agilidade, permitindo que equipes diferentes trabalhem em diferentes partes da interface de maneira independente, sem comprometer a consistência ou a eficiência da aplicação como um todo.
Fig. 4 – Representação da arquitetura em Nuvem.
No fim das contas, "tá na Nuvem, sei lá que Nuvem!" deixou de ser uma brincadeira para se tornar a realidade que molda o desenvolvimento de software nos dias de hoje. A linguagem Java e suas ferramentas continuam essenciais para garantir que as aplicações atendam às demandas de um mundo cada vez mais dependente da nuvem e suas potencialidades infinitas. E voando nessa ideia, principalmente com a possibilidade de processamento de grandes volumes de dados, alguns sites surgiram:
Stripe (2020): é uma plataforma de pagamento, que utiliza Java em várias partes do seu backend, especialmente em suas soluções de processamento de pagamentos e integração com bancos.
Hopin (2020): A plataforma de eventos virtuais, surgiu em 2020 e rapidamente se tornou um sucesso, aproveitando a infraestrutura de Java para garantir a escalabilidade de grandes eventos online.
Vercel (2020): é uma plataforma de deployment, que cresceu rapidamente com o uso de Next.js, também permite integração com sistemas baseados em Java, facilitando o uso de microserviços e a criação de aplicações escaláveis.
CureMetrix (2020): Utiliza Java para análise de grandes volumes de dados médicos e para aplicações de IA que ajudam a melhorar diagnósticos médicos.
6 Conclusão
Com base no que foi discutido, é possível concluir que o desenvolvimento web com Java, ao longo das últimas três décadas, percorreu um caminho de inovações e adaptações a cada mudança no cenário tecnológico. Desde os primeiros passos nos anos 90, com o uso de Java Applets para animações e interatividade na web, até a atualidade, onde arquiteturas como microsserviços, contêineres e a nuvem moldam a maneira como as aplicações são construídas e escaladas. Cada fase da evolução do Java foi marcada por uma busca contínua por escalabilidade, flexibilidade e eficiência, sempre alinhada às necessidades do mercado e às tendências tecnológicas da época.
Nos anos 2020, a nuvem se tornou o palco central dessa transformação, deixando para trás o conceito abstrato de armazenamento de dados para se consolidar como um verdadeiro motor de inovação. A arquitetura serverless, a orquestração de microserviços com Kubernetes e o uso de micro frontends representam o que há de mais moderno na construção de aplicações dinâmicas e escaláveis. O Java, com sua robustez, acompanhou de perto essas mudanças, e continua essencial no desenvolvimento de soluções que atendem a um mundo cada vez mais interconectado e dependente de grandes volumes de dados.
Assim, ao refletirmos sobre a jornada do desenvolvimento web com Java, vemos que a linguagem não apenas sobreviveu às transformações, mas se fortaleceu, se adaptando às novas exigências e, hoje, desempenha um papel fundamental em diversas soluções inovadoras que estão moldando o futuro da tecnologia. O que antes parecia um conceito nebuloso e distante – como no famoso meme de Dilma, "Tá na Nuvem, sei lá que Nuvem!" – se tornou a base para a construção das aplicações mais poderosas e impactantes da atualidade.
Referencial
Cavalcanti, Ricardo e Ronan, Jobson. Introdução a J2EE – Conceitos de Arquitetura. Disponível em https://slideplayer.com.br/slide/3388345/#google_vignette.
Omena, Anderson. Proposta de um sistema Web em Java para aumentar a eficiência do processo de acompanhamento acadêmico dos alunos do Programa de Pós-graduação em Química e Biotecnologia de Universidade Federal de Alagoas. Dissertação de mestrado, disponível em file:///C:/Users/USER/Downloads/Proposta%20de%20um%20sistema%20web%20em%20java%20para%20aumentar%20a%20efici%C3%AAncia%20do%20processo%20de%20acompanhame.pdf. 2018.
Ribeiro, Hudson et al. Integração de Tecnologias para Desenvolvimento de Sistemas Web, utilizando a metodologia AJAX. Disponível em: https://www.aedb.br/seget/arquivos/artigos06/304_Artigo_SEGET.pdf?utm_source=chatgpt.com
História da linguagem Java. Disponível em: https://www.oracle.com/br/java/?utm_source=chatgpt.com