JavaJ2E可以';不要在我的servlet中使用sendRedirect()

JavaJ2E可以';不要在我的servlet中使用sendRedirect(),java,Java,我有一个错误,我自己似乎无法纠正 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); if (session.getAttribute("username") != null) { if ((b

我有一个错误,我自己似乎无法纠正

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)

我做错了什么?

在每次重定向后添加
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");
}

在每次重定向后添加
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");
}
因为当条件变为真时,响应对象会多次调用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");
}
因为当条件变为真时,响应对象会多次调用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");
}

对于响应对象,只能调用一次
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**********

您不能多次重定向,响应只能重定向到一个页面。

您只能为响应对象调用一次
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**********

您不能多次重定向,响应只能重定向到一个页面。

尝试将所有url放在变量中,并在结尾处仅使用一个sendRedirect。在重定向之前,代码中的某些内容已开始提交响应。尝试将所有url放在变量中,并在结尾处仅使用一个sendRedirect。代码中的某些内容已被删除在重定向之前已开始提交响应。