gpt4 book ai didi

java - getRequestDispatcher()、getOutputStream() 和 getWriter() 有什么关系吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:53 26 4
gpt4 key购买 nike

我有我的工作代码片段

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()。我一直在搜索这个异常,但我没有看到任何适合我当前情况的解释。

这些是我的假设(如果我错了,请纠正我)

  1. getRequestDispatcher() 隐式调用 getOutputStream(),如果调用 getWriter() 方法,则会显示异常,因为 getOutputStream() 和 `getWriter() 不能同时调用。

  2. 如果在 getRequestDispatcher() 方法之前调用 getWriter() 方法,则 getRequestDispatcher() 将使用返回的 PrintWriter 对象,而不是调用 getOutputStream()

如果我的所有假设都是错误的,你能告诉我这3个方法的正确关系是什么吗?

最佳答案

getOutputStream() 和 getWriter() 之间存在关系

但是,getRequestDispatcher() 之间没有关系

getOutputStream()getWriter() 之间的关系是,在请求处理过程中不能同时使用它们。原因是,使用这两种方法都会交错数据。不符合最终要求。

在您的情况下,getRequestDispatcher()正在使用getOutputStream(),因此您稍后无法使用getWriter()进行写入。

也可能是其他情况。

关于java - getRequestDispatcher()、getOutputStream() 和 getWriter() 有什么关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36928058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com