Servlet中的IllegalStateException

时间:2014-10-11 18:09:14

标签: java servlets illegalstateexception

这来自专业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

我有什么遗失的吗?我该如何重现此异常?

2 个答案:

答案 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