我有我的工作代碼Do 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()
將使用返回PrintWriter
對象,而不是調用getOutputStream()
。
如果我所有的假設都是錯誤的,你能告訴我這3種方法的正確關係嗎?
我認爲你已經說得很對。 – EJP