android利用post方式与web服务器通信
2015-04-14 19:56
344 查看
接上篇get方式,本文介绍post方式与服务器通信。调用两种类来实现post。 一个与get方法一样调用Url与HttpUrlConnection类,利用输入输出流方式,利用ObjectInputStream()函数进行**对象**读写。 另一个利用HttpPost(url)与HttpResponse类来实现。 先介绍第一种,对象写入后台一本书的信息,book类(定义很简单)。 android客户端:记得**设置**相应参数(post)
Book book = new Book(); book.setBookName("Android高级编程"); book.setAuthor("Reto Meier"); book.setPages(398); book.setPrice(59.00); URL url = null; ObjectOutputStream oos = null; try { url = new URL("http://10.0.2.2:8080/ServerTest/TestServlet"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setConnectTimeout(10000); connection.setReadTimeout(10000); connection.setRequestMethod("POST"); oos = new ObjectOutputStream(connection.getOutputStream()); oos.writeObject(book); InputStreamReader read = new InputStreamReader(connection.getInputStream()); BufferedReader br = new BufferedReader(read); String line = br.readLine(); //String line = ""; //while ((line = br.readLine()) != null) { // Log.d("TAG", "line is " + line); //}//估计是为了确保读取全部信息 System.out.println("获得信息:"+line); br.close(); connection.disconnect(); } catch (Exception e) { System.out.println("错误信息:"+e.getMessage()); e.printStackTrace(); } finally { }
服务器端:
public class TestServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ObjectInputStream ois = null; try { ois = new ObjectInputStream(request.getInputStream()); Book book = (Book) ois.readObject(); System.out.println("书名是: " + book.getBookName()); System.out.println("作者是: " + book.getAuthor()); System.out.println("价格是: " + book.getPrice()); System.out.println("页数是: " + book.getPages()); PrintWriter out = response.getWriter(); //out.print("success");//客户端接受为“android” out.write("success!");//客户端接受为“android!”很神奇吧~~ out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } finally { ois.close(); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
方法一总结:基本跟java中的socket通信完全一样,前台两行代码,new url ,getConnection,然后操作输入输出流。后台利用response,request获得输入输出流。
第二种方式直接利用HttpPost类,不需再另外设置post方法。使用org.apache.http.*的一些类实现编码和参数设置。
try{ HttpPost request=new HttpPost(URL); List<NameValuePair> params=new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("username","lg")); params.add(new BasicNameValuePair("password","123")); request.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8)); HttpResponse response=new DefaultHttpClient().execute(request); String msg=EntityUtils.toString(response.getEntity()); System.out.println("返回消息:"+msg); }catch(Exception e){ e.printStackTrace(); }
服务器端代码跟get方式的后台程序完成相同,只不过在doPost()方法实现。
方法二总结:利用NameValuePair类来设置类似java中map的方式来绑定键值数据,再利用Entity来设置实体传递对象。利用DefaultHttpClient类来实现联网操作,返回HttpResponse的数据体。
[b]****************[/b]通信方式总结[b]**********[/b]
这些天研究了socket和http通信的原理,发现正在联网传递的代码也就几行而已。socket中的输入输出流,web服务器端的request.getInputStream与response.getWriter操作。根据传输内容分简单字符串和类的实例等不同来调用不同的类。
实在是java关于网络传输的部分太不熟悉了,导致android通信部分学习的很慢。
相关文章推荐
- 利用WebRequest来实现模拟浏览器通过Post方式向服务器提交数据
- 利用WebRequest来实现模拟浏览器通过Post方式向服务器提交数据
- 利用WebRequest来实现模拟浏览器通过Post方式向服务器提交数据
- 利用WebRequest来实现模拟浏览器通过Post方式向服务器提交数据
- 利用WebRequest来实现模拟浏览器通过Post方式向服务器提交数据
- android客户端采用Post和Get方式向web服务器传递参数
- VC,MFC中通过POST与GET方式与WEB服务器通信
- android 学习笔记之 post get 方式与 服务器JSON通信
- android中的http通信---(3)通过get、post方式传数据给服务器
- Android 网络通信之通过GET和POST方式提交参数给web应用
- Android GET方式和POST方式提交给WEB服务器
- Android客户端post方式连接web(servlet)服务器实现简单登录
- Android利用post方式给webview传递json参数
- Android客户端post方式连接web(servlet)服务器实现简单登录
- android客户端与javaweb服务器端数据通信-Post-键值对
- android客户端与javaweb服务器端数据通信-Post-Json格式数据
- 使用基于Android网络通信的OkHttp库实现Get和Post方式简单操作服务器JSON格式数据
- Android之使用HTTP协议的Get/Post方式向服务器提交数据
- (转自:Never-say-Never)Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- Android利用JNI通过Socket与服务器进行通信