Вызов сервлетов из сервлетов (JSDK 2.0)
Чтобы Ваш сервлет вызвал другой сервлет, Вы можете:
Этот урок обсуждает второй из вышеуказанных пунктов. Чтобы вызвать общедоступный метод другого сервлета напрямую, Вам надо:
Чтобы получить доступ к объекту Servlet, используйте метод getServlet класса ServletContext. Получите объект ServletContext из объекта ServletConfig, который находится в объекте Servlet. Пример поможет Вам разобраться. Когда сервлет BookDetail вызывает сервлет BookDB, сервлет BookDetail запрашивает объект
Servlet сервлета BookDB вот так:
public class BookDetailServlet extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... BookDBServlet database = (BookDBServlet). getServletConfig().getServletContext().getServlet("bookdb"); ... } }
Как только Вы получили объект сервлета, Вы можете вызывать любой общедоступный метод этого сервлета. Например, сервлет BookDetail вызывает метод getBookDetails сервлета 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); ... } }
Вам надо проявлять осторожность при вызове методов другого сервлета. Если сервлет, который Вы хотите вызывать, реализует интерфейс SingleThreadModel interface, Ваш вызов может нарушить природу однопотокового сервлета. (Сервер не может вмешаться и обеспечить, чтоб вызов был в момент, когда никто не взаимодействует с сервлетом.) В таком случае, Ваш сервлет должен использовать HTTP запрос к другому сервлету вместо прямых вызовов методов.