Java J2E не может использовать sendRedirect () в моем сервлете

1

У меня ошибка, которую я не могу исправить самостоятельно

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession();
    if (session.getAttribute("username") != null) {
        if ((boolean)session.getAttribute("usertype") == true) {
            int userID = Integer.parseInt(request.getParameter("id"));
            UserDAO dao = new UserDAO();
            User user = dao.ReturnUserID(userID);
            dao.DeleteUser(user);
            dao.Close();

            response.sendRedirect("/SupTracking/admin");
        }
        response.sendRedirect("/SupTracking/index");
    }
    response.sendRedirect("/SupTracking/index");
}

Я получаю ошибку в response.sendRedirect("/SupTracking/admin"), говоря, что я не могу использовать sendRedirect(), потому что ответ уже отправлен.

Ошибка должна была быть довольно простой, за исключением того, что я не понимаю, ГДЕ я что-то послал в этом коде...

Вот точная трассировка стека:

java.lang.IllegalStateException: Impossible d''appeler "sendRedirect()" après que la réponse ait été envoyée
org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:494)
com.SupTracking.servlets.admindeluser.doGet(admindeluser.java:39)
javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Что я делаю не так?

  • 0
    попробуйте поместить все URL в переменную и использовать только один sendRedirect в конце
  • 0
    Что-то в вашем коде уже начало отправлять ответ, прежде чем вы перенаправите.
Теги:

3 ответа

2
Лучший ответ

Вы можете вызвать sendRedirect один раз для объекта ответа. Вы должны изменить свою логику, чтобы вы знали, что ее вызывают только одно:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession();
    if (session.getAttribute("username") != null) {
        if ((boolean)session.getAttribute("usertype") == true) {
            int userID = Integer.parseInt(request.getParameter("id"));
            UserDAO dao = new UserDAO();
            User user = dao.ReturnUserID(userID);
            dao.DeleteUser(user);
            dao.Close();

            response.sendRedirect("/SupTracking/admin");
        }
        else
        {
            response.sendRedirect("/SupTracking/index");
        }
    }
    else
    {
        response.sendRedirect("/SupTracking/index");
    }
}

Ваша проблема:

 if ((boolean)session.getAttribute("usertype") == true) {
            int userID = Integer.parseInt(request.getParameter("id"));
            UserDAO dao = new UserDAO();
            User user = dao.ReturnUserID(userID);
            dao.DeleteUser(user);
            dao.Close();

            response.sendRedirect("/SupTracking/admin");******Called Here**********
        }
        response.sendRedirect("/SupTracking/index");*******Also Called Here**********

Вы не можете перенаправлять несколько раз, ответ может перенаправляться только на одну страницу.

3

Добавьте оператор return после каждого перенаправления. В противном случае вы будете перенаправлять много раз, если один или оба условия, если условия истинны.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession();
    if (session.getAttribute("username") != null) {
        if ((boolean)session.getAttribute("usertype") == true) {
            int userID = Integer.parseInt(request.getParameter("id"));
            UserDAO dao = new UserDAO();
            User user = dao.ReturnUserID(userID);
            dao.DeleteUser(user);
            dao.Close();

            response.sendRedirect("/SupTracking/admin");
            return;
        }
        response.sendRedirect("/SupTracking/index");
        return;
    }
    response.sendRedirect("/SupTracking/index");
}
1

Поскольку ваш sendRedirect() вызывается много раз на объекте ответа, так как ваши условия становятся истинными.

Попробуй это:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession();
    if (session.getAttribute("username") != null) {
        if ((boolean)session.getAttribute("usertype") == true) {
            int userID = Integer.parseInt(request.getParameter("id"));
            UserDAO dao = new UserDAO();
            User user = dao.ReturnUserID(userID);
            dao.DeleteUser(user);
            dao.Close();

         }
    }
    response.sendRedirect("/SupTracking/index");
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню