【发布时间】:2016-04-29 01:24:05
【问题描述】:
我的工作代码有这个 sn-p
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() 不能同时调用。如果在
getRequestDispatcher()方法之前调用getWriter()方法,getRequestDispatcher()将使用返回的PrintWriter对象而不是调用getOutputStream()。
如果我所有的假设都是错误的,你能告诉我这三种方法的正确关系是什么吗?
【问题讨论】:
-
我认为你说得对。
标签: java exception servlets stream printwriter