Olá desenvolvedores depois de uma rápida introdução sobre servlets, hoje vamos na prática entender como funciona uma servlet ao criar a nossa primeira. Já sabemos que este pequeno servidor compreende uma tecnologia para a comunicação com páginas web dinâmicas.

Servlet e front-end se comunicam a partir da URL – Uniform Resource Locator, cujo mapeamento é feito por meio do arquivo web.xml, que fica dentro da subpasta WEB-INF. Assim, uma requisição será enviada para o servlet (classe Java), onde serão utilizados recursos do Java para que os dados possam ser capturados e processados. Após o processamento dos dados a resposta será exibida na tela.

Desse modo, podemos dizer que a comunicação entre servlet e HTML é orientada via de regra por dois principais protocolos, POST (enviar) e GET (buscar). Estes protocolos trabalham em duas vias, ou seja, lado do cliente e lado do servidor.

MVC EM DUAS CAMADAS

Tendo visto este pequeno resumo do que vimos até o momento sobre servlet, vamos a implementação, e desse modo trabalhar com arquitetura MVCModel-View-Controller, em duas camadas.

Mas o que significa trabalhar com o MVC em duas camadas? Significa que nos concentraremos na camada Model e View. Isto é, na camada de interface com o usuário ou cliente-side como também é conhecida. Utilizando HTML ou XML, esta camada responde também pelas interfaces de apresentação.

E também trabalharemos com a camada Model que é a camada responsável pela estrutura de dados atrás de uma parte específica da aplicação, onde as regras de negócio são tratadas e onde ocorrem também a leitura e validação dos dados. É aqui que os dados são obtidos, processados e traduzido em informações relevantes para serem exibidas pela View.

SERVLET NA PRÁTICA

Para o nosso exemplo implementaremos uma tela de login na página index.jsp. apague tudo que está dentro da tag <body> para implementar somente as linhas de código referente a tela que iremos construir. Crie outras duas páginas .jsp na raiz da pasta WebContent, acessonegado.jsp e acessoliberado.jsp. Ou renomeie as páginas cabeçalho.jps e rodapé.jsp.

Na página acessoliberado implemente a tag de título com uma mensagem de boas-vindas ao usuário.

<h3>Seja bem-vindo(a) ao sistema em JSP</h3>

E na página acessanegado.jsp informe ao usuário que seu acesso ao sistema foi negado.

<h3>Seu acesso ao sistema foi negado</h3>

Em ambas as páginas já teremos implementada a tag de ação jsp: setProperty, onde o asterisco define todos os valores da solicitação de entrada do objeto bean. Desse modo, na classe “BeanCursoJsp” defina os atributos login e senha e gere para eles os métodos getters and setters.

MÉTODO DE VALIDAÇÃO DE SENHA

Ainda na classe BeanCursoJsp criaremos um método de validação de senha que receberá duas strings, login e senha respectivamente. Assim, se login e senha fornecidos forem iguais ao cadastrado a senha será validade, se não o acesso será bloqueado.

CRIANDO A SERVLET

E agora sim, criaremos a servlet, antes, porém, para manter a organização crie dentro da pasta src o package servlet. E então clique com o botão direito sobre o package servlet >> New >> Servlet, onde em Class name, você definirá o nome da classe.

Se preferir apague os comentários, para diminuir o tamanho do código, e até mesmo para deixá-lo mais legível. E assim teremos o escopo de uma servlet, que de forma bem simples intercepta dados e nos fornece a resposta.

IMPORTANTE: no tutorial anterior falamos que a classe servlet deveria ser criada em um arquivo web.xml dentro da pasta WEB-INF. Entretanto, observe que logo acima da assinatura da classe tem uma anotação. É ela que possibilita a criação da servlet fora do contexto do arquivo web.xml.

@WebServlet(“/LoginServlet”)

Note que a classe estende a HttpServlet, uma interface para fornecer informações de solicitação para servlets HTTP. E implementa o método doPost que cumpre a função de enviar os dados do formulário para serem processados para o recurso especificado.  E também o doGet, utilizado em uma requisição que não altera o estado do servidor, ou seja, é utilizado sempre em consultas.

Considere então um formulário, em action onde é informado o nome da URL ou o caminho para qual o conteúdo do formulário será submetido, informe o nome da classe. Dessa forma o formulário irá procurar pela servlet.

Assim, se o método de envio não estiver declarado o método invocado será o doGet. Por outro lado, se o post estiver declarado então o doPost será invocado. Porém, é comum que na servlet dentro do doGet o doPost seja chamado.

doPost(request, response);

FORMULÁRIO

Implemente o formulário, com type=”text” para login e senha e type=”submit” para o botão cujo valor é “Logar”. E como o método de envio que estamos utilizando é o post. Na servlet dentro do doPost, implementaremos o código que fará a requisição do login e senha, e capturar os dados que estamos recebendo. Antes, porém, é preciso instanciar o objeto BeanCursoJsp.

BeanCursoJsp beanCursoJsp = new BeanCursoJsp();

String login = request.getParameter("login");
String senha = request.getParamenter("senha");

E por fim, escreva uma condição de validação deste login e senha. Assim, se login e senha informados forem correspondentes aos dados definidos na implementação do método validarLoginSenha, true será retornado, E assi o acesso ao sistema será liberado, do contrário o acesso será negado.

A liberação do acesso se dará por meio do RequestDispatcher que define um objeto que recebe solicitações do cliente e as envia para qualquer recurso (como um servlet, arquivo HTML ou arquivo JSP) no servidor.

requestDispatcher dispatcher = request.getRequestDispatcher("acessoliberado.jsp");

Assim o objeto dispatcher precisa invocar o forward que deve ser chamado antes que a resposta seja confirmada para o cliente. Ele encaminha um pedido de servlet para outro recurso (servlet, arquivo JSP ou arquivo HTML) no servidor. Esse método permite que um servlet faça o processamento preliminar de uma solicitação e outro recurso para gerar a resposta.

dispatcher.forward(request, response);

Todavia, se os dados não forem correspondentes e o acesso for negado o mesmo procedimento deverá ser executado, porém, sendo direcionado para uma página distinta.

EM POUCAS PALAVRAS

E com isso temos um exemplo, simples, prático e eficiente do uso do request e response. O que aprendemos neste tutorial é uma importante parte do que deve fazer parte do seu arsenal de conhecimento, portanto, não avance com dúvidas, refaça esta aula, pratique e solidifique seu conhecimento. Eu fico por aqui e nós nos vemos no próximo tutorial.