【发布时间】:2014-12-06 16:50:01
【问题描述】:
来自Professional Java For Web
一书第一次调用getParameter,getParameterMap, 请求对象上的 getParameterNames 或 getParameterValues,Web 容器判断请求是否包含 post 变量,以及 如果确实如此,它会通过获取 请求的 InputStream。请求的 InputStream 可以只读 一次。如果您对包含以下内容的请求调用 getInputStream 或 getReader 发布变量,然后尝试检索其中的参数 请求,尝试检索参数会导致 IllegalStateException。
这是我的测试代码:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String name = req.getParameter("name");
System.out.println(name);
ServletInputStream inputStream = req.getInputStream();
int read = inputStream.read();
System.out.println(read);
}
当我使用 ?name=test 访问 Servlet 时,我得到:
test
-1
我有什么遗漏吗?如何重现此异常?
【问题讨论】:
-
它还说“如果我们在包含 post 变量的请求中检索参数,然后调用 getInputStream 或 getReader,则对 getInputStream 或 getReader 的调用将失败并出现 IllegalStateException。”
标签: java servlets illegalstateexception