Usando HTML Forms com Servlets

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (2)  (0)

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:

  • init()

  • service()

  • destroy()

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.

Gera uma resposta que faz a requisição submetida pelo cliente

Figura 1: Gera uma resposta que faz a requisição submetida pelo cliente

1.0 - Pedido de um Servlet é mandado para o servidor web.

1.1 - O objeto ServletRequest é criado a partir do pedido.

1.2 - A informação requerida é guardada no ServletRequest Object.

1.3 - O objeto ServlerResponse é criado para a requisição.

1.4 - O método service() do servlet é invocado e é referência do ServlerRequest e o ServletRequest é provido.

1.5 - O Servlet lê a informação requerida a partir do objeto ServletRequest.

1.6 - O Servlet gera conteúdos e os guarda para o objeto ServletResponse.

1.7 - Depois da compilação do método service(), o servidor web manda os conteúdos do ServletResponse.

1.8 - Conteúdos do ServletResponse são mandados ao cliente.

Listagem 1: Criando um form de uma página HTML

<%@ 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>

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.

Formulário

Figura 2: Formulário

Listagem 2: Criar LoginInfo Servlet para receber as informações submetidas do form HTML

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();

        }
}

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.

Listagem 3: Criando um 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>

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.

Listagem 4: Declarando Servlet

<servlet>
	<servlet-name>LoginInfoName</servlet-name>
	<servlet-class>LoginInfo</servlet-class>
</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>.

Listagem 5: Definindo Servlet

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

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.

Carregamento do WelcomeServlet, se o usuário é validado

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.

Ficamos por aqui por hoje, até o próximo artigo!

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?