这来自专业Java for Web
第一次调用getParameter,getParameterMap时, Web上的请求对象上的getParameterNames或getParameterValues 容器确定请求是否包含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
我有什么遗失的吗?我该如何重现此异常?
答案 0 :(得分:3)
您已撰写doGet
。在HTTP GET方法中,数据通过URL(以?name1=value1&name2=value2...
的形式)传递,而不是通过输入流传递。
要处理POST变量,您必须编写doPost
方法并使用表单提供数据(至少是通常的方式)。
另请注意,本书说要获取异常,您必须先打开流,然后尝试访问该参数。不像你写的那样反过来。
答案 1 :(得分:-2)
尝试在发回响应后更新一些请求参数。发送响应后,对请求进行更改是非法/不可能的。
request.getRequestDispatcher("jsp_path_here").forward(request,response);
request.setParameter("param",someString); //should throw an exception