У меня ошибка, которую я не могу исправить самостоятельно
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)
Что я делаю не так?
Вы можете вызвать 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**********
Вы не можете перенаправлять несколько раз, ответ может перенаправляться только на одну страницу.
Добавьте оператор 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");
}