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.