0

我是 json 新手,我收到 json 对象格式的请求。

       {"login_detail":[{"password":"world","username":"hello"}]}

我想通过 servlet 解析它,我的代码如下 -

     public class LoginServlet extends HttpServlet{

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    //String json=request.getParameter("x");
   try {
        String jsonreq=request.getParameter("x");

        System.out.println(jsonreq);



        JSONArray outerArray = (JSONArray) JSONSerializer.toJSON(jsonreq);
        JSONObject json1 = (JSONObject) outerArray.get(0);
        JSONArray jarray1 = json1.getJSONArray("login_detail");
        for (int i = 0; i < jarray1.size(); i++)
        {
          JSONObject hotel = jarray1.getJSONObject(i);
          String user = hotel.getString("pasword");
          System.out.println(user);
          String pass=hotel.getString("username");
          System.out.println(pass);
        }

        out.print(jsonreq);

    }catch(Exception e){
        System.out.println("inside exception");
        e.printStackTrace();
    }
    finally {            
        out.close();
    }


}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

public String getServletInfo() {
    return "Short description";
}}

但我得到了一个例外

       Sep 09, 2013 4:57:52 PM org.apache.catalina.core.StandardWrapperValve invoke
       SEVERE: Servlet.service() for servlet login threw exception
       java.lang.ClassNotFoundException:            org.apache.commons.lang.exception.NestableRuntimeException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1850)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at com.serverside.LoginServlet.processRequest(LoginServlet.java:40)
at com.serverside.LoginServlet.doPost(LoginServlet.java:72)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:722)

现在我正在使用 json-lib 2.2.2 jar 文件。从 android 客户端接收请求没有任何问题。我无法理解 JSONObject 参数化构造函数是否在 ANDROID 中完美运行,那么为什么它不适用于 servlet。??什么问题我无法理解。如果有人会帮助我,我将非常感激。

4

5 回答 5

1

finally i have solve my problem see the code

 try {
       String data=request.getParameter("x");
       System.out.println("received data : "+data);
       JSONObject myjson=new JSONObject(data);
       JSONArray json_array=myjson.getJSONArray("login_detail");
       // return simple array with [] bracket
       System.out.println("json_array "+json_array);
       int size=json_array.length();
       ArrayList<JSONObject> arrays=new ArrayList<JSONObject>();
       for(int i=0;i<size;i++){
           JSONObject another_json_object=json_array.getJSONObject(i);
           arrays.add(another_json_object);
       }
       JSONObject[] jsons=new JSONObject[arrays.size()];
       arrays.toArray(jsons);
    // return simple array with [] bracket
       System.out.println("arrays :"+arrays);
    // return simple array and filter [] when we call get(index)
       System.out.println("0 index : "+arrays.get(0));
       //System.out.println("1 index : "+arrays.get(1));

       //here we are accessing value using key of the array at 0 index
       // we can do same for next index --> get(index).get("key")
       System.out.println(arrays.get(0).get("username")+"   
       "+arrays.get(0).getString("password"));

    }catch(Exception e){
        System.out.println("inside exception");
        e.printStackTrace();
    }
于 2013-09-10T09:00:35.333 回答
1

你必须拥有所有的依赖库,如果你错过了这些,你会得到运行时异常。您缺少org.apache.commons

顺便说一句,更改hotel.getString("pasword");hotel.getString("password");

于 2013-09-09T11:50:47.960 回答
0

NestableRuntimeException最可能的解释是您的 webapp 的 WAR 文件中缺少定义 Apache 的 JAR 。

根据http://www.findjar.com,有很多 JAR 文件可以提供该依赖项,但最有可能的是其中一个commons-lang-x.x.jar文件;例如commons-lang-2.3.jar

如果您使用 Maven 构建 WAR 文件,只需将相关依赖项添加到 POM 文件中。否则,手动下载 JAR 并将其添加到 WAR 文件的“/WEB-INF/lib”目录中。

于 2013-09-09T11:49:45.827 回答
0

您可以下载Apache Commons Lang并将 jar 文件放在/WEB-INF/lib. 它应该可以解决问题。

于 2013-09-09T11:54:22.270 回答
0

确认您的责任 jar 已被复制到 WEB-INF/lib 文件夹......我猜是这样。

于 2013-09-09T12:52:01.293 回答