Servlets quem são? Onde vivem? Como usar?
Tags: servlet, java, javaee, servidor
Published: 2021-08-06 18:42:47

Esse é um artigo conceitual com uma pitadinha de técnica, coisa básica, mas que irá te proporcionar conhecimentos valiosos, vem comigo, vamos bater um papo bem legal? Falar de código.<br/><br/>


##Porque foram criados os Servlets?


Bom falar de Servlet nos leva automaticamente a requisitar o protocolo HTTP(sacou? risos), afinal ele é a base para a programação web. Agora falando de aplicações web com Java não é necessário criar classes que suportem o HTTP. Nosso idioma Java tem em suas bibliotecas uma API topzera com o nome de Servlet que seria (servidorzinho). Assim entendemos o porquê foram criados os Servlets, receber requisições HTTP, interpretá-las, processar e devolver uma resposta (response) a quem requisita.
**Fácil em? Bora que tem mais…**<br/><br/>

>*""Há e nem venha falando, para que eu preciso saber disso? Coisa antiga, tra lá lá, o fato é que devemos cada vez mais buscar ser além da média, buscar se destacar e não ser mais 1 no meio desse mundo lotado de devs rsrsr, então muitas vezes compreender sobre a base das “coisas” nos ajudam a entender e resolver melhor problemas, Me acompanhe…""* **#NãoSejaMedia**

<br/><br/>
###Foi assim que tudo começou…


No mundo Java, essa história de gerar páginas dinâmicas nasceu com a tecnologia **Servlets**, a primeira e principal tecnologia capaz de passar do padrão de páginas meramente estáticas que tinha na época, os servlets apareceram lá no ano de 1997. Nesse mesmo ano rolou a segunda edição do [JavaOne](https://en.wikipedia.org/wiki/JavaOne) (*um dia e vou…*), atraiu em torno de 8.000 devs, para a época foi a maior conferência de desenvolvimento de software do mundo,😱 uauu! Isso trouxe bastante visibilidade para os servlets e contribuiu muito para a sua disseminação. Hoje, a última versão disponível é a versão 4.0.3 lançada em agosto de 2019. E só para você saber, o Java EE está na versão 8, lançada em setembro de 2017, só para te situar, **vamos à frente que atrás vem gente…**<br/><br/>



##Como Usamos Servlets no Desenvolvimento Web com Java?


Então… Na versão Java EE 5 criar Servlets era um processo de configuração um tanto quanto chato, envolvia arquivo XML, o web.xml, e sempre que tinha-se a necessidade de criar um novo servlet, novamente mais configuração, era um processo. Com o tempo isso fica bem chato, afinal queremos meter mão no código e não ficar fazendo configurações. Mas aí na especificação Java EE 6, chegou então Servlets 3.0, haaa ficou legalzinho implementar servlets, a configuração então fica bem programática, utilizando apenas simples anotações. O que isso quer dizer? Chega de configurar Servlets no web.xml, agora basta apenas usar a anotação [@WebServlet](https://docs.oracle.com/javaee/7/api/javax/servlet/annotation/WebServlet.html).😎<br/><br/>


*Fiquei empolgado que vou até te mostrar…*😁

![Servlet criado com anotação](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oocvmkt78lv8dcxktkhb.png)
 

Mas se liga, já parou para pensar que hoje em dia nós nem precisamos especificar servlet nenhum em nossas aplicações? 🤔


Tipo assim, quando jogamos nossos desenvolvimentos nos servidores de aplicações, então toda essa “mágica” fica a cargo deles, citando a exemplo o WildFly, de forma simples, por baixo dos panos, então quando a requisição é feita pelo lado cliente, a mesma é recepcionada por um **ServletContainer**, que então invoca(*kuchiyose no jutsu rsrs*) o servlet com base nas implementações, envia a classe java que deve controlar as regras necessárias, então processa os dados e gera uma resposta(response). Basicamente assim o funcionamento.<br/><br/>

**Servlets são escaláveis**? Os servlets são eficientes e sim são escaláveis, ​​porque não criam novos processos sempre que requisitados, em vez disso, os mesmos são tratados por threads separados no processo do servidor web.

![Esquema básico usando Servlet](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0cwrliefubryywi15txo.png)<br/><br/>



###Algo que eu ainda não havia entendido…🤔

 
Fiquei pensando, hoje onde trabalho é usado o middleware WebSphere da IBM nas aplicações que tenho atuação, mas já usei também o JBoss, Wildfly e outros, esses que citei são bem pesados vamos dizer assim, em relação ao conhecidíssimo Tomcat. Então fui estudar e entendi a questão, a resposta é simples, o famosinho TomCat ele é basicamente um ServletContainer(*falamos sobre lá encima*) já os outros que citei, eles têm a funcionalidade do TomCat(ServletContainer) e ainda tem mais alguns módulos que em umas aplicações são necessários, por isso o TomCat é mais leve, arquivo de download menor, etc.<br/><br/>


##Que tal entender melhor sobre as funcionalidades de um Servlet. Bora?🤩<br/><br/>


**Então, chegou a hora de descer um pouco mais a camada…**


A API Servlet tem uns métodos bem interessantes já prontos, precisamos apenas sobrescrever e adequar as nossas necessidades, por exemplo, o método **doGet()**, que recupera dados, representa claro o método Http GET(*Que novidades rsrs*), e o método **doPost()**, que faz então a inserção de dados, esse representa qual método Http? Bom não precisa responder né.
Estamos evoluindo, **vamos estender mais o papo!**


![Servlet](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/famh6vnp7ybyx2m1q8rl.png)


Implementamos um servlet, fácil né criar uma classe e herdar de **HttpServlet**, ou você pode criar direto um servlet, vou mostrar um exemplo via Eclipse.<br/><br/>


![Servlet Eclipse IDE](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wsbt8d0jqyzz34iisdso.png)


Bom servlet criado, mas como encontramos esse servlet a partir de uma página HTML? Ou seja, como eu envio os dados para ele processar e me devolver uma resposta? Então, uma pagina que chama um servlet pode usar o “/”+nome do servlet na url, dessa forma irá encontrar encontra-lo.<br/><br/>


*Vamos fazer um exemplo bem básico…*


![Formulario HTML](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ssgh5vrv6bvi8j6707qv.png)

Como batizamos nosso servlet de formulario, então vamos direcionar para ele fazer o processamento dos dados do nosso formulário de login(bem basicão) e para isso inserimos ali no fim da url o nome do servlet(/formulario).

Perceba que na página HTML a requisição é feita usando o método Http POST, então na classe servlet temos que implementar um método que consiga receber esses dados, qual é esse método? Claro ele mesmo **doPost()**, usando a classe [HttpServletRequest](https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html) para ter acesso aos dados da requisição, vamos usar um dos métodos já prontinho dessa classe, o **getParameter()**, ele vai permitir pegar o valor do input na requisição, só precisa informar qual o nome do parâmetro do formulário da página HTML que queremos receber o valor.<br/><br/>


*Implementação… Simulando uma tentativa de login.*

![Servlet](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ftox4m77p257qax3va3f.png)

 
Nota: Como não iremos utilizar o método **doGet()** vamos retirar ele de cena.<br/><br/>



*Temos a seguinte implementação.*

![Tela HTML](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cbzyvmdek0i49aujlmqp.png)<br/><br/>


Pagina redirecionada após o processamento do **Servlet**🥳🥳

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5779kviqzz4v2l7y79r.png)


Bom esse foi só um exemplo basicão, claro os Servlets são muito mais poderosos e te convido a ir além, vou deixar uma imagem bem legal de um fluxo bem mais detalhado do uso de um servlet.

![Esquema Servlet](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w8rrna9ivh3x85c7usmk.png)<br/><br/>

Perceba que tem alguns métodos interessantes que não falamos aqui nesse artigo básico, mas que você encontra fácil na documentação todas as instruções necessárias para aprofundar seu aprendizado.

[Artigo da Oracle](https://www.oracle.com/java/technologies/instant-tutorial.html) <br/><br/>

Para esses testes usei a seguinte stack

Middleware WildFly versão 20
JDK Oracle 1.8
Eclipse IDE for Java EE
Maven versão 3.3.9

Enfim espero que eu tenha lhe ajudado, estou te esperando para batermos mais um papo bem interessante e produtivo no próximo artigo, te desejo sucesso e para isso tenha coragem com muita fé. Aguardem… ✌️ 🤞 🤟