Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > как запустить один сервлет из другого


Автор: N2zEast 22.3.2005, 15:53
как запустить один сервлет из другого?

Автор: batigoal 22.3.2005, 16:18
Цитата

Вызов сервлетов из сервлетов
Для того, чтобы один сервлет мог вызывать другой, вам необходимо или: Чтобы сервлет мог выполнять HTTP запросы другого сервлета. (Открытие соединения с URL описано в уроке «Работа с URL» данного руководства,) или Чтобы сервлет мог напрямую вызывать public-методы другого сервлета в случае, если оба сервлета работают на одном сервере. Данный раздел относится ко второму пункту условия. Для того чтобы напрямую вызвать public-методы другого сервлета необходимо:
Знать имя вызываемого сервлета
Получить доступ к объекту Servlet сервлета
Вызвать public-метод сервлета

Чтобы получить доступ к объекту 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"); ... } }

Если у вас есть объект servlet, вы можете вызвать любой из public-методов сервлета. Например, сервлет 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, ваш вызов сервлета может нарушить его однопотоковую природу (у сервера нет возможности вмешаться и гарантировать то, что вы вызываете сервлет не в тот момент, когда он взаимодействует с другим клиентом). В этом случае вместо того, чтобы напрямую вызывать методы другого сервлета, необходимо сделать HTTP запрос.


Прошу прощения за качество, это из ПДФки.
Добавлено @ 16:22
А я сам использовал первый метод - отправлял POSTом урл и читал присылаемый сервлетом объект.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)