使用HttpURLConnection和Servlet传输json
来源:互联网 发布:青岛seo顾问公司 编辑:程序博客网 时间:2024/06/04 23:23
客户端Exception
java.io.IOException: Server returned HTTP response code: 500 at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1876) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
服务器端Exception
java.lang.ClassNotFoundException: net.sf.json.JSONObject
这是我最近遇到的两个Exception,其实是同一个问题导致的。当然,同样的Exception也所对应的源问题也不是唯一的,所以如果我的方法没有解决各位的问题,各位还是要继续百度啦。
解决办法:检查是否将Servlet依赖的jar放到了Tomcat的lib目录下。
安卓客户端和服务器端的通信方式有多种:URLConnection,HttpClient,,HttpURLConnection。
最近做比赛项目,队友开发安卓用Android Studio,我一直用的eclipse。没办法,只能我妥协一下了,老老实实把AS装上了。
我把服务器端注册登录的servlet写好以后,想随便写个app测试下。开始用HttpClient通信,然后AS说不认识HttpClient。好吧那我手写导进apache包来,结果HttpClient给我划了道横线,deprecated。百度了一下,说AS推荐使用HttpURLConnection来代替HttpClient。
好吧那我就用HttpURLConnection。客户端代码(HttpURLConnection传输json)大概是这样的:
JSONObject obj = new JSONObject(); obj.put("name", name); obj.put("pwd", pwd); URL url = new URL("http://XXXXXXXXXXXXXXXX"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Charset", "UTF-8"); conn.setRequestProperty("contentType", "application/json"); conn.connect(); OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream()); // 发送给服务器 writer.write(obj.toString()); writer.flush(); writer.close(); //接收服务器返回信息 BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8")) ; String line; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { sb.append(line); } conn.disconnect();
服务器端Servlet代码:
//接收客户端信息 BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8")) ; String line; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { sb.append(line); } JSONObject json = JSONObject.fromObject(sb.toString()); String name=null; String pwd = null; if (json != null) { JSONObject jo = JSONObject.fromObject(json); id = jo.getString("name"); password = jo.getString("pwd"); } String result = "success"; String reason = null; try{ //数据库操作 }catch(Exception e){ reason = "数据库操作失败!"; result = "failed"; e.printStackTrace(); } //返回给客户端信息 response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=UTF-8"); PrintWriter out = response.getWriter(); JSONObject jsonObject = new JSONObject(); jsonObject.put("result", result); jsonObject.put("reason", reason); out.write(jsonObject.toString()); out.flush(); out.close();
然后就开始出错了:点击登录按钮app就退出。开始看日志信息,似乎是个服务器端内部错误500,而且在安卓客户端conn.getInputStream()这里报错。
之后直接把app登录代码抽出来了,放在一个Java文件里测试(因为放在app里安装运行测试好麻烦)。还是服务器端500。
之后各种百度呀,我的服务器端代码和人家的也没啥区别啊,就接收个json,然后返回个信息啊。
然后,我索性在本地直接运行服务器端servlet,就报了java.lang.ClassNotFoundException: net.sf.json.JSONObject
可是这个包我明明导入了啊,然后继续百度,发现,需要把依赖的jar包放到Tomcat的lib目录下。我真是醉了。
照做了之后,这个问题终于解决了。
然后代码放回app里,做了个TextView显示服务器返回的信息,结果死活不显示,查看日志:恍恍惚惚看到了个handle,忽然想到,Android更新个UI怎么也得用个Handler啊!
完
- 使用HttpURLConnection和Servlet传输json
- Servlet利用base64和json向客户端传输图片
- 关于Android使用HttpURLConnection传输含有中文JSON数据的报错、乱码问题
- HTTP传输协议,包括HttpUrlConnection和HttpClient。
- Servlet+spring+mybatis结合传输json数组
- 使用HttpURLConnection和HttpClient
- 使用HttpURLConnection 和HttpClient
- HttpURLConnection和HttpClient使用
- Android:HttpURLConnection使用,Tomcat的Servlet
- httpurlconnection servlet
- 利用java的HttpURLConnection和Servlet通信
- HttpURLConnection和HttpClient获取Json数据
- HttpURLConnection和HttpClient获取Json数据
- 使用json传输数组实例
- 使用json协议传输二进制文件
- android使用HttpURLConnection连接java ee服务器传输对象
- httpclient 和 httpurlconnection 中利用gzip传输数据
- HttpURLConnection和HttpClient的使用
- myeclipse的svn突然失效不能用的解决办法
- RCNN论文学习讲解
- matlab在DSP中的应用(六)---离散傅里叶变换的性质
- 【深度学习论文】:U-Net
- Maven详解之仓库------本地仓库、远程仓库
- 使用HttpURLConnection和Servlet传输json
- 系统设计面试题分析
- android 电池(一):锂电池基本原理篇
- android app内存优化
- 虚拟货币开发专题(如何通过运算挖矿)
- 两次left join 查询
- SAP查看某物料的 库位 和 仓位
- caffe源码简单解析—Layer层
- POJ 1001 Exponentiation