值<title>类型为java.lang.String的Apache无法转换为JSONObject

时间:2015-05-08 12:32:06

标签: java android json servlets jsonexception

&lt; p&gt;我将json从servlet发送到android应用程序,并发生以下异常: - &lt; / p&gt; &LT;预&GT;&LT;代码&GT; org.json.JSONException:值&lt; html&gt;&lt; head&gt;&lt; title&gt;类型为java.lang.String的Apache无法转换为JSONObject &LT; /代码&GT;&LT; /预&GT; &lt; p&gt;以下是我的servlet代码,如果此处有任何问题,请纠正我: - &lt; / p&gt; &lt; pre&gt;&lt; code&gt;公共类LoginCheck扩展HttpServlet {   protected void processRequest(HttpServletRequest请求,HttpServletResponse响应)         抛出ServletException,IOException {     response.setContentType( “文本/ JSON;字符集= UTF-8”);     PrintWriter out = response.getWriter();     JSONObject obj1 = new JSONObject();     long uname = Long.parseLong(request.getParameter(“mobile”));     String pwd = request.getParameter(“pass”);     尝试{     Connection con = new MyConnection()。connect();     PreparedStatement ps = con.prepareStatement(“select * from bmt_user where mobile_num =?and password =?”);     ps.setLong(1,UNAME);     ps.setString(2,PWD);      ResultSet rs = ps.executeQuery();         如果(rs.next())        {             obj1.accumulate( “登录”, “成功”);             通过out.println(obj1.toString());        }         其他         {             obj1.accumulate( “登录”, “失败”);             通过out.println(obj1.toString());         }        out.write(obj1.toString());     } catch(Exception e){out.println(e.toString());}   }   @覆盖   protected void doGet(HttpServletRequest请求,HttpServletResponse响应)          抛出ServletException,IOException {      processRequest(请求,响应);    }    @覆盖    protected void doPost(HttpServletRequest请求,HttpServletResponse响应)         抛出ServletException,IOException {      processRequest(请求,响应);   }  } &LT; /代码&GT;&LT; /预&GT; &lt; p&gt;另外,当我直接将值分配给uname和pwd而不使用request.getParameter()时,servlet运行得很好并返回json,即&lt; / p&gt; &lt; pre&gt;&lt; code&gt; long uname = 48372984; String pwd =“fabcd” &LT; /代码&GT;&LT; /预&GT; &lt; p&gt;输出 - &lt; / p&gt; &LT;预&GT;&LT;代码&GT; { “登录”: “失败”} &LT; /代码&GT;&LT; /预&GT;

1 个答案:

答案 0 :(得分:2)

你的servlet代码引发了一个未被捕获的异常,最终出现在HTML风格的服务器默认HTTP 500错误页面中,如果Apache Tomcat服务器有以下标题:

<!DOCTYPE html><html><head><title>Apache Tomcat/8.0.21 - Error report</title>

这就解释了为什么客户端的JSON解析器会打开它。尝试在普通的webbrowser中重现相同的内容,您将完整地看到HTML错误页面。

问题很可能出在以下几行:

long uname = Long.parseLong(request.getParameter("mobile"));

您无法预先检查/捕获潜在的NullPointerExceptionNumberFormatException。阅读服务器日志并相应地修复代码。也许参数名称错了?您的本地变量名为uname,与请求参数名称mobile不匹配。