【问题标题】:IllegalStateException In ServletServlet 中的 IllegalStateException
【发布时间】: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


【解决方案1】:

你写了一个doGet。在 HTTP GET 方法中,数据是通过 URL(以?name1=value1&name2=value2... 的形式)传递的,而不是通过输入流。

要处理 POST 变量,您必须编写 doPost 方法并使用表单提供数据(至少这是通常的方式)。

还请注意,书上说要获取异常,您必须先打开流,然后尝试访问参数。不像你写的那样反过来。

【讨论】:

  • protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { StringBuilder stringBuilder = new StringBuilder(1000);扫描仪扫描仪=新扫描仪(request.getInputStream()); while (scanner.hasNextLine()) { stringBuilder.append(scanner.nextLine()); } String uid = request.getParameter("uid"); String pwd = request.getParameter("pwd"); System.out.println(uid + ":" + pwd); }
  • RealSkeptic... 我尝试使用 doPost 方法,但仍然无法获取 IllegalStateExecption。虽然它返回了一个空值但没有异常。
猜你喜欢
  • 1970-01-01
  • 2017-02-14
  • 2013-06-25
  • 2011-06-26
  • 2014-05-13
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多