## Llamar a Servlets desde una Página HTML

Para invocar un servlet desde dentro de una página HTML se utiliza la URL del servlet en la etiqueta HTML apropiada.

Esta página utiliza los servles ShowCart, Cashier, y Receipt de Duke's Bookstore. Afortunadamente este es el orden en que se verán los servlets cuando miremos nuestra hoja y compremos nuestros libros.

Para un acceso más directo al servlet ShowCart servlet, pulsa el enlace Show Cart que hay en la página principal del Duke's Bookstore. Si tenemos servletrunner o un servidor web configurados para ejecutar el ejemplo, vayamos a la página principal de la librería mostrada en la página anterior. Sólo por diversión, podríamos añadir un libro a nuestra hoja de pedido antes de acceder al servlet ShowCart.

#### Ejemplos de URLs de Servlets en etiquetas HTML

La página devuelta por ShowCartServlet tiene varios enlaces, cada uno de los cuales tiene un servlet como destino. Aquí podemos ver el código de esos enlaces:

        public class ShowCartServlet extends HttpServlet {

            public void doGet (HttpServletRequest request,
                               HttpServletResponse response)
    	    throws ServletException, IOException
            {
                    ...
                    out.println(... +
                                "<a href=\"" +
                                response.encodeUrl("/servlet/cashier") +
                                "\">Check Out</a>      " +
                                ...);
                    ...
            }
            ...
        }

Este código resulta en una página HTML que tiene el siguiente enlace:

        <a href="http://localhost:8080/servlet/cashier>Check Out</a">

Si llamamos a la página del showcart, podremos ver el enlace como si vieramos el fuente de la página. Luego pulsamos sobre el enlace. El servlet cashier devolverá la página que contiene el siguiente ejemplo.

La página mostrada por el server cashier presenta un formulario que pide el nombre del usuario y el número de la tarjeta de crédito. El código que imprime el formulario se parece a esto:

        public class CashierServlet extends HttpServlet {

            public void doGet (HttpServletRequest request,
                               HttpServletResponse response)
    	    throws ServletException, IOException
            {
                ...
                out.println(... +
                            "<form action=\"" +
                            response.encodeUrl("/servlet/receipt") +
                            "\" method=\"post\">" +
                            ...
                            "<td><input type=\"text\" name=\"cardname\"" +
                            "value=\"Gwen Canigetit\" size=\"19\"></td>" +
                            ...
                            "<td><input type=\"submit\"" +
                            "value=\"Submit Information\"></td>" +
                            ...
                            "</form>" +
                            ...);
                out.close();
            }
            ...
        }

Este código resulta en una página HTML que tiene la siguiente etiqueta para iniciar el formulario:

        <form action="http://localhost:8080/servlet/receipt" method="post">

Si cargamos la página del servlet cashier en nuestro navegador podremos ver la etiqueta que inicia el formulario como si vieramos el fuente de la página. Luego enviamos el formulario. El servlet receipt devolverá una página que contiene el siguiente ejemplo. La página del servlet receipt se resetea a sí misma, por eso si queremos verla, tenemos que hacerlo rápido!.

La página devuelta por el servlet receipt tiene una "meta tag" que utiliza una URL de servlet como parte del valor del atributo http-equiv. Específicamente, la etiqueta redirecciona la página hacia a la página principal del Duke's Bookstore despues de dar las gracias al usuario por su pedido. Aquí podemos ver el código de esta etiqueta:

        public class ReceiptServlet extends HttpServlet {

            public void doPost(HttpServletRequest request,
                               HttpServletResponse response)
    	    throws ServletException, IOException
            {
                ...
                out.println("<html>" +
                            "<head><title> Receipt </title>" +
                            "<meta http-equiv=\"refresh\" content=\"4; url=" +
                            "http://" + request.getHeader("Host") +
                            "/servlet/bookstore;\">" +
                            "</head>" +
                ...
            }
            ...
        }

Este código resulta en una página HTML que tiene la siguiente etiqueta:

        <meta http-equiv="refresh"
            content="4; url=http://localhost:8080/servlet/bookstore;">

Ozito