Listado completo de tutoriales

87 - Llamada a servlet desde un hipervínculo (con y sin parámetros)


Problema:

Confeccionaremos una página HTML con dos hipervínculos a dos servlet. El primero tiene por objetivo mostrar la tabla de multiplicar del 2, el segundo servlet llega como parámetro el número del cual queremos mostrar la tabla de multiplicar.

Primero creamos un proyecto llamado proyectoservlet4. Seguidamente creamos el archivo HTML (presionamos el botón derecho del mouse sobre la carpeta WebContent y creamos un archivo HTML llamado menu.html) y codificamos lo siguiente:

<!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>Insert title here</title>
</head>
<body>
<a href="TablaDel2"> Mostrar tabla del 2</a><br>
<a href="Tabla?num=5">Mostrar tabla del 5</a>
</body>
</html>

El primer hipervínculo en la propiedad href indicamos el nombre del servlet a ejecutar:

<a href="TablaDel2"> Mostrar tabla del 2</a><br>

El segundo hipervínculo llama al servlet Tabla y pasa un parámetro num con el valor 5 (este valor se rescatará posteriormente desde el servlet):

<a href="Tabla?num=5">Mostrar tabla del 5</a>

Ahora crearemos un servlet llamadoTablaDel2:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TablaDel2
 */
@WebServlet("/TablaDel2")
public class TablaDel2 extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TablaDel2() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
         PrintWriter out = response.getWriter();

         out.println("<html>");
         out.println("<head></head>");         
         out.println("<body>");
         out.println("<h1>Tabla del 2</h1>");
         for(int f=2;f<=20;f=f+2) {
             out.println(f);
             out.println(" - ");
         }
         out.println("</body>");
         out.println("</html>");          
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

Es importante hacer notar que la anotación del servlet coincide con la propiedad href del hipervínculo de la página HTML:

@WebServlet("/TablaDel2")
public class TablaDel2 extends HttpServlet {

En el método doGet procesamos la petición mediante la generación de la página dinámica:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
         PrintWriter out = response.getWriter();

         out.println("<html>");
         out.println("<head></head>");         
         out.println("<body>");
         out.println("<h1>Tabla del 2</h1>");
         for(int f=2;f<=20;f=f+2) {
             out.println(f);
             out.println(" - ");
         }
         out.println("</body>");
         out.println("</html>");          
    }

Ahora crearemos el segundo servlet llamado Tabla:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Tabla
 */
@WebServlet("/Tabla")
public class Tabla extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Tabla() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
         PrintWriter out = response.getWriter();

         out.println("<html>");
         out.println("<head></head>");         
         out.println("<body>");
         String cad=request.getParameter("num");
         int valor=Integer.parseInt(cad);
         out.println("<h1>Tabla del "+cad+"</h1>");
         for(int f=valor;f<=valor*10;f=f+valor) {
             out.println(f);
             out.println(" - ");
         }
         out.println("</body>");
         out.println("</html>");          
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

Para recuperar el parámetro del hipervínculo llamamos al método getParameter del objeto request. Debemos pasar un String con el nombre del parámetro y el mismo nos retorna el valor del parámetro:

         String cad=request.getParameter("num");

Retornar