Usando HTML Forms com Servlets

Veja neste artigo como trabalhar com Servlet para receber informações de um form html e da exibição na página web

Servlet é a tecnologia da Java provida pela Oracle que é usada para comunicar servidores web e aplicações de clientes (como browser's). Servlet que provê ao Java uma API para facilitar o desenvolvimento das aplicações web.

Isto é parcialmente implementado pelo servidor web e pelo programador da aplicação.

Do ponto de vista da aplicação, é uma classe em Java que é criada usando o API do Servlet e instanciado pelo servidor web para processar o pedido dinamicamente.

O objetivo deste artigo é aprender o que é um Servlet, como receber informações submetidas pelos clientes web como navegadores web, e como responder ao cliente de acordo com as informações submetidas.

Servlet em detalhes:

Servlet é o API do Java que é usado para criar dinamicamente aplicações web. Para escrever em aplicação usando Servlets, o pacote chamado javax.servlet e seus sub pacotes são usados. No núcleo do API do Servlet, uma interface do javax.servlet.Servlet provê o ciclo de vida dos métodos do Servlet. Estes métodos são usados para inicializar, gerenciar e destruir um Servlet, que são os seguintes:

Sempre quando um usuário visita uma url de uma página web, cada visita a url é considerada como uma requisição. Em cada requisição gerada pela página web que chega ao servidor, este manda uma resposta que depende das estratégias de desenvolvimento.

Figura 1. Gera uma resposta que faz a requisição submetida pelo cliente
  1. Pedido de um Servlet é mandado para o servidor web.
  2. O objeto ServletRequest é criado a partir do pedido.
  3. A informação requerida é guardada no ServletRequest Object.
  4. O objeto ServlerResponse é criado para a requisição.
  5. O método service() do servlet é invocado e é referência do ServlerRequest e o ServletRequest é provido.
  6. O Servlet lê a informação requerida a partir do objeto ServletRequest.
  7. O Servlet gera conteúdos e os guarda para o objeto ServletResponse.
  8. Depois da compilação do método service(), o servidor web manda os conteúdos do ServletResponse.
  9. Conteúdos do ServletResponse são mandados ao cliente.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>LoginInfo</title> </head> <body> <form method = "post" action = "LoginInfo"> Login Id: <input type = "text" name = "name"/> <br> Password: <input type = "password" name = "password"/> <br> <input type = "submit" value = "Login"/> </form> </body> </html>
Listagem 1. Criando um form de uma página HTML

Este código cria um form que aceita login id e o password como as duas entradas e as processa para o servidor web, quando o usuário clica no botão de login ou aperta enter. O form tag define que a informação será mandada usando um método de postagem. Deste modo, não será mostrado na url e será transferido para o nome do Servlet LoginInfo. Este Servlet receberá informação usando o objeto requerido criado da classe HttpServletRequest.

Figura 2. Formulário
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class test */ @WebServlet(urlPatterns = "/LoginInfo") public class LoginInfo extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public LoginInfo() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated constructor stub String id = request.getParameter("name"); String pass = request.getParameter("password"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); RequestDispatcher rd = null; request.setAttribute(id, "name"); if(id.equals("name") && pass.equals("pass")){ rd = request.getRequestDispatcher("/WelcomeServlet"); rd.forward(request, response); } else{ out.println("<b>Invalid Login Info.</b><br>"); rd = request.getRequestDispatcher("/LoginInfo.jsp"); rd.include(request, response); } out.close(); } }
Listagem 2. Criar LoginInfo Servlet para receber as informações submetidas do form HTML

O código acima define a classe LoginInfo que estende HttpServlet e define os métodos doPost() e doGet(). O doPost() recebe a informação transferida do form HTML usando o método getParameter da classe HttpServletRequest. Esses dois métodos, doGet() e doPost() tem as exceções Servlet Exception e IOException, e aceitam dois parâmetros dos tipos HttpServletRequest e HttpServletResponse. A primeira linha do método doPost() define o tipo de resposta para o cliente. O tipo de resposta neste servlet será HTML ou do tipo de conteúdo de texto.

A próxima linha cria uma variável de referência do tipo PrintWriter e designa a referência do método response.getWrite(). A próxima linha deste método define a variável de referência ao tipo do RequestDispatcher e configura um atributo usando o método setAttribute() da classe HttpServletResquest. Agora a validação da dada entrada do cliente usando o método de string equals(). Se o nome de usuário é igual ao "name" e password é igual a "pass" o controle será transferido para o novo servlet "WelcomeServlet" usando os métodos getRequestDispatcher() e foward() como é mostrado a seguir:

rd = request.getRequestDispatcher("/WelcomeServlet"); rd.forward(request, response);

Se o login e o password não coincidirem, uma mensagem de erro será gerada "invalid login info" usando o método println() e o login da página será incluído usando o método include(), como segue:

out.println("<b>Invalid Login Info</b><br>"); rd.include(request,response);

Na última linha deste método, a stream do Writer será fechada usando o método close(). Neste servlet, o padrão da configuração da url foi definida usando anotações, como é mostrado a seguir:

@WebServlet (urlpattern = "/LoginInfo")

A configuração pode ser feita usando um arquivo xml que é o descritor de desenvolvimento. É chamado de arquivo web.xml.

<?xml version=”1.0” encoding="UTF-8"?> <web-app xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns=http://java.sun.com/xml/ns/javaee xmlns:web=http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd xsi:schemaLocation=http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd id="WebApp_ID" version="2.5"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name> LoginInfoName </servlet-name> <servlet-class> LoginInfo </servlet-class> </servlet> <servlet-mapping> <servlet-name> LoginInfoName </servlet-name> <url-pattern> /LoginInfo </url-pattern> <servlet-mapping> </web-app>
Listagem 3. Criando um arquivo web.xml

Os conteúdos da listagem acima definem o arquivo web.xml (descritor de desenvolvimento). A primeira tag <xml> define a versão xml para o debugador. A próxima tag é a raiz que define a classe de servlet e seu mapeador de url form de ação html, descrição de contexto de parâmetro, e o parâmetro de inicialização usando esta tag.

A sub-tag <welcome-file-list> carrega o arquivo de início padrão, enquanto a aplicação web inicializa usando sua sub-tag <welcome-file>. A próxima tag <servlet> é usada para definir a classe de servlet que é para ser mapeada no url form de ação html usando a sub-tag (<servlet-mapping>).

A tag <servlet> usa duas sub-tags <servlet-name> e <serlet-class> para definir que nome será usado para mapear a url e a classe de Servlet que será mapeada nesta url.

<servlet> <servlet-name>LoginInfoName</servlet-name> <servlet-class>LoginInfo</servlet-class> </servlet>
Listagem 4. Declarando Servlet
Nota: O nome especificado usando a tag <servlet-name> na tag <servlet> deve ser o mesmo que o definido em <servlet-mapping> para que se mapeie a classe do servlet com a url.

A url é definida usando a sub-tag <url-pattern> da tag <servlet-mapping>.

<servlet-mapping> <servlet-name>LoginInfoName</servlet-name> <url-pattern>/LoginInfo</url-pattern> <servlet-mapping>
Listagem 5. Definindo Servlet
Figura 3. Gera uma mensagem de erro, se o usuário entrar com uma informação errada

A figura acima mostra uma mensagem de erro e carrega a página de login novamente, se o usuário fornece informações de login inválidas.

Figura 4. Carregamento do WelcomeServlet, se o usuário é validado

A figura acima mostra a mensagem de boas-vindas depois do carregamento do WelcomeServlet, se o usuário entrar com informações válidas. A informação do usuário é validada com as informações já gravadas de userid "name" e password "pass".

Conclusão:

Neste artigo, aprendemos o que é um Servlet, qual é sua precisão, como receber informações submetidas por um cliente web como um navegador web e como responder ao cliente de acordo com as informações submetidas.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados