Обучение Java. Сервлеты

        

Вызов сервлетов из сервлетов (JSDK 2.0)


Чтобы Ваш сервлет вызвал другой сервлет, Вы можете:

  • Либо дать сервлету сделать HTTP запрос к другому сервлету. (Это относится к общему программированию на Java. Для более подробной информации, обратитесь к ресурсу Working with URLs
    .)  
  • Либо сервлет может вызвать общедоступные методы другого сервлета напрямую, если оба сервлета запущены на одном и том же сервере.
  • Этот урок обсуждает второй из вышеуказанных пунктов. Чтобы вызвать общедоступный метод другого сервлета напрямую, Вам надо:

  • Знать имя сервлета, метод которого Вы хотите вызвать.
  • Получить доступ к объекту сервлета Servlet. 
  • Вызвать общедоступный метод.
  • Чтобы получить доступ к объекту 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 запрос к другому сервлету вместо прямых вызовов методов.



    Содержание раздела