Сервлет вызывается дважды! - PullRequest
3 голосов
/ 27 ноября 2008

извините, но у меня нет действительного кода, но я постараюсь объяснить:

У меня есть сервлет, сопоставленный со следующим:

/admin/* 

Итак, это относится к сервлету:

public class AdminController extends MainController {
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        // Do stuf here
    }
}

Вот MainController:

public class MainController extends HttpServlet {
@Override
public void service(ServletRequest request, ServletResponse response) {
    String requesturi = ((HttpServletRequest)request).getRequestURI();
    reqlist = Arrays.asList(requesturi.substring(requesturi.indexOf(Util.rootPath) + Util.rootPath.length()).split("/"));
    reqlist = reqlist.subList(1, reqlist.size());

    doPost((HttpServletRequest)request, (HttpServletResponse)response);
}

Итак, запрос передается AdminController, без проблем, но потом я кое-что понял:

Сервлет вызывается дважды! . И это вызывает у меня много ошибок ..

Кто-нибудь знает это? Это потому что я использовал какое-то наследие? Спасибо за все!

Ответы [ 4 ]

9 голосов
/ 02 октября 2014

Хотя это старая тема, но мой ответ может кому-то помочь. Сегодня я столкнулся с той же проблемой. Мой конкретный сервлет раньше работал нормально, и внезапно он начал вызывать метод doGet дважды. В ходе расследования я обнаружил, что мой браузер Chrome имеет расширение для проверки HTML, которое снова вызывает сервлет с тем же запросом на проверку HTML. После отключения расширения проблема была решена.

9 голосов
/ 27 ноября 2008

Метод HttpServlet.service вызывается для всех типов запросов, и вы видите запрос HEAD, а затем запрос GET или POST. Вместо того, чтобы реализовывать сервис, просто внедрите doGet или doPost. Обычно делается просто реализовать один из doPost или doGet, а затем вызвать другой из того, для которого у вас нет реализации.

2 голосов
/ 09 марта 2012

Я решил ту же проблему простым способом.

Если вы разрабатываете локально и получаете доступ к своему приложению с адресом http://127.0.0.1, который является петлевой сетью, измените адрес на http://localhost, который является прямым.

Эта проблема не возникнет, если вы действительно запустите ее на веб-хостинге или сервере и получите доступ к ней из внешней сети.

0 голосов
/ 28 февраля 2017

Была такая же проблема, и я пробовал все, что упомянуто выше и на других постах, но проблема была только на локальном.

Если у вас тоже ничего не работает, попробуйте выполнить развертывание:)

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