Как выполнить несколько сервлетов в последовательности? - PullRequest
4 голосов
/ 11 июня 2010

Я только начинаю с сервлетов и мне удалось создать несколько сервлетов, которые действуют как отдельные URL-адреса для заполнения базы данных для некоторого фиктивного тестирования. Что-то в форме:

public class Populate_ServletName extends HttpServlet {
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
     resp.setContentType("text/plain");
     //Insert records
     //Print confirmation
  }
}

У меня есть около 6 таких сервлетов, которые я хочу выполнить в последовательности. Я думал об использовании setLocation для установки перенаправления следующей страницы, но не был уверен, что это правильный подход, потому что перенаправления должны происходить после вставки записей. В частности, я ищу что-то вроде этого:

public class Populate_ALL extends HttpServlet {
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
     resp.setContentType("text/plain");
     //Call Populate_1
     //Call Populate_2
     //Call Populate_3
     //...
  }
}

Есть предложения?

Ответы [ 2 ]

6 голосов
/ 11 июня 2010

Используйте RequestDispatcher#include() на URL-адресе, соответствующем url-pattern сервлета.

public class Populate_ALL extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     response.setContentType("text/plain");
     request.getRequestDispatcher("/populateServlet1").include(request, response);
     request.getRequestDispatcher("/populateServlet2").include(request, response);
     request.getRequestDispatcher("/populateServlet3").include(request, response);
     //...
  }
}

Примечание: если эти сервлеты нельзя использовать независимо , то это неправильный подход, и вам следует использовать для этого автономные классы Java, которые не расширяются HttpServlet. В вашем конкретном случае я думаю, что Pattern Builder может быть интересен.

RequestDispatcher#forward() здесь не подходит, так как выдает IllegalStateException, когда заголовки ответа уже зафиксированы. Это, несомненно, будет иметь место, когда вы передаете запрос / ответ через несколько сервлетов, каждый из которых пишет в ответ.

HttpServletResponse#sendRedirect() здесь абсолютно не подходит, поскольку он неявно создает совершенно новые request и response, тем самым уничтожая оригинальные.

Смотри также:

1 голос
/ 11 июня 2010

Похоже, что вам может понадобиться служба, которую каждый из сервлетов может использовать для выполнения какой-либо работы. Тогда сервлеты не зависят друг от друга, а скорее все используют сервис.

Однако вот объяснение пересылки или перенаправления запросов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...