Servlets (Básico)

Para hacer que nuestro servlet llame a otro servlet, podemos.

  • Un servlet puede hacer peticiones HTTP a otro servlet. La apertura de una conexi�n URL se explica en las p�ginas de la secci�n Trabajar con URLs.
  • Un servlet puede llamar directamente a los m�todos p�blicos de otros servlet, si los dos se est�n ejecutando dentro del mismo servidor.

Esta p�gina explica la segunda opci�n. Para llamar directamente a los m�todos p�blicos de otro servlet, debemos.

  • Conocer el nombre del servlet al que queremos llamar.
  • Obtener el acceso al objeto Servlet del servlet.
  • Llamar al m�todo p�blico del servlet.

Para obtener el acceso al objetoServlet, utilizamos el m�todo getServlet del objeto ServletContext. Obtener el objeto ServletContext desde el objeto ServletConfig almacenado en el objeto Servlet. Un ejemplo aclarar� esto. Cuando el servlet BookDetail llama al servlet BookDB, el servlet BookDetail obtiene el objeto Servlet del BookDB Servlet de esta forma.

public class BookDetailServlet extends HttpServlet {

    public void doGet (HttpServletRequest request,
                       HttpServletResponse response)
        throws ServletException, IOException
    {
        ...
            BookDBServlet database = (BookDBServlet)
                getServletConfig().getServletContext().getServlet("bookdb");
        ...
    }
}

Una vez que tenemos el objeto Servlet, podemos llamar a cualquiera de los m�todos p�blicos del servlet. Por ejemplo, el servlet BookDetail llama al m�todo getBookDetails del servlet BookDB.

public class BookDetailServlet extends HttpServlet {

    public void doGet (HttpServletRequest request,
                       HttpServletResponse response)
        throws ServletException, IOException
    {
        ...
            BookDBServlet database = (BookDBServlet)
                getServletConfig().getServletContext().getServlet("bookdb");
            BookDetails bd = database.getBookDetails(bookId);
        ...
    }
}

Debemos tener precauci�n cuando llamemos a m�todos de otro servlet. Si el servlet al que queremos llamar implementa el interface SingleThreadModel, nuestra llamada podr�a violar la naturaleza mono-thread del servlet. (El servidor no tiene forma de intervenir y asegurarse de que nuestra llamada suceda cuando el servlet no est� interactuando con otro cliente). En este caso, nuestro servlet deber�a hacer una petici�n HTTP al otro servlet en vez de llamar directamente a sus m�todos.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP