私は私の作業コードgetRequestDispatcher()、getOutputStream()およびgetWriter()には何らかの関係がありますか?
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
request.getRequestDispatcher("link.html").include(request, response);
String userName = request.getParameter("userName");
String passWord = request.getParameter("passWord");
のこのスニペットを持っている私はそれは私がそれをやってみたかったように動作し、このコードで問題ありません。しかし、私がgetWriter()とgetRequestDispatcher()の場所を交換すると、IllegalArgumentExceptionが表示されます。
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
request.getRequestDispatcher("link.html").include(request, response);
PrintWriter writer = response.getWriter();
String userName = request.getParameter("userName");
String passWord = request.getParameter("passWord");
java.lang.IllegalStateException: getOutputStream() has already been called for this response
org.apache.catalina.connector.Response.getWriter(Response.java:614)
org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:199)
com.servlet.LoginServlet.doPost(LoginServlet.java:34)
javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
getOutputStream()
は既に呼び出されていると言われています。私はこの例外を検索していますが、現在の状況については適切な説明が表示されません。
これらは私の仮定(私が間違っているなら、私を修正してください)
getRequestDispatcher()
ある暗黙的getOutputStream()
を呼び出し、あなたがgetWriter()
メソッドを呼び出す場合getOutputStream()
と `にgetWriter()ができないため、例外が表示されます。両方とも呼ばれた。getWriter()
方法がgetRequestDispatcher()
メソッドの前に呼び出され場合、
getRequestDispatcher()
ではなくgetOutputStream()
を呼び出すので返されたPrintWriter
オブジェクトを使用します。
私の前提が間違っている場合は、これらの3つの方法との正しい関係は何か教えてください。
あなたはそれがかなり正しいと思います。 – EJP