Esta página explica la segunda opción. Para llamar directamente a los métodos públicos de otro servlet, debemos:
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.