J'essaye de passer des valeurs du servlet à la page jsp en utilisant le code ci-dessous:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
System.out.println("try");
String taskid=request.getParameter("id");
convty = new Connectivity();
con = convty.setConnection();
st=con.createStatement();
query="select * from task_table";
rset=convty.getResultSet(query, con);
while(rset.next()) {
System.out.println("while");
lst.add(rset.getString("task_id"));
lst.add(rset.getString("date"));
lst.add(rset.getString("project_name"));
}
rset.close();
System.out.println("after while");
} catch(Exception e) {
RequestDispatcher dd= request.getRequestDispatcher("error.jsp");
dd.forward(request, response);
} finally {
System.out.println("finally1");
HttpSession sessionvar = request.getSession();
sessionvar.setAttribute("TaskData", "lst");
response.sendRedirect("usertaskpage.jsp");
lst.clear();
out.close();
}
}
lorsque je lance ma page, je reçois:
Erreur:
Java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
org.Apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.Java:483)
src.Taskservlet.doPost(Taskservlet.Java:108)
javax.servlet.http.HttpServlet.service(HttpServlet.Java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.Java:728)
org.Apache.Tomcat.websocket.server.WsFilter.doFilter(WsFilter.Java:51)
J'ai essayé d'utiliser:
RequestDispatcher dd=request.getRequestDispatcher("usertaskpage.jsp");
dd.forward(request, response);
mais j'ai eu la même erreur.
Comment corriger cette erreur?
vous avez déjà transmis la réponse dans le bloc catch:
RequestDispatcher dd = request.getRequestDispatcher("error.jsp");
dd.forward(request, response);
vous ne pouvez donc plus appeler:
response.sendRedirect("usertaskpage.jsp");
car il est déjà transmis (engagé).
Donc, ce que vous pouvez faire est de: conserver une chaîne pour assigner où vous devez transmettre la réponse.
String page = "";
try {
} catch (Exception e) {
page = "error.jsp";
} finally {
page = "usertaskpage.jsp";
}
RequestDispatcher dd=request.getRequestDispatcher(page);
dd.forward(request, response);
La cause première de l'exception IllegalStateException est un Java tente d'écrire dans le flux de sortie (réponse) une fois la réponse validée).
Il est toujours préférable de s'assurer qu'aucun contenu n'est ajouté à la réponse après le transfert ou la redirection pour éviter IllegalStateException. Cela peut être fait en incluant une instruction "retour" juste à côté de l'instruction forward ou redirect.
vous ne pouvez pas appeler sendRedirect (), après avoir déjà utilisé forward (). Donc, vous obtenez cette exception.