android中与tomcat之间的通信--登录系统
2015-03-26 16:18
393 查看
项目中一直是用wcf作为android端与services端的通信,但是作为大家普遍的通信方式不是很了解,就做了一个小型的登录系统,一天多的调试终于把前后端的连接调试成功了。这里大致的讲解下前段代码和后端代码是如何关联的。
在这个登录系统中有两条线,一条是android把数据传送给服务器端,另外一条是服务器端把判断结果返回给安卓端进行判断。
一、android端把数据传送给服务器端
1、请求的URL存放在了HttpRequest 对象中,
2、所有的参数首先转化成BasicNameValuePair(Key,value),其中key对应的是参数名,value对应的是参数值,然后把List的BasicNameValuePair集合通过 UrlEncodeFormEntity()实现编码的设置,不然有可能会出现乱码的情况
3、创建的DefaultHttpClient的对象,执行HttpRequest对象中的URL以及参数传递
那么在服务器端如何接受安卓端传过来的参数呢?
通过doPost中的HttpServletRequest 的对象,通过getParamerter()方法,获取相应的参数值,然后进行逻辑处理
二、服务器端的数据传送到android端
如代码,把Result结果传送到android端
好了,大致介绍的就是这些,在前后端进行数据通信时,出现了些问题,就是地址参数都是对的,但是就是连接不到服务器端,最后通过ping 服务器端才发现,我的服务器端是处于局域网中,android平板连接的是外网的wifi,不在一个网段,所以连接不上,,最后调整android平板WiFi,连接到局域网中的wifi,问题顺利解决\(^o^)/~。
源代码下载地址:
http://download.csdn.net/detail/oyeshuier/8536135
在这个登录系统中有两条线,一条是android把数据传送给服务器端,另外一条是服务器端把判断结果返回给安卓端进行判断。
一、android端把数据传送给服务器端
<span style="font-size:12px;">//URL 指的想请求的服务器端的所对应的Servlet ,例如http://192.168.21.41:8080/androidweb/LoginServlet HttpPost request = new HttpPost(url); //遍历Map中的中的参数,全部转化成NameValuePair类型,并放在List集合中 List<NameValuePair> params = new ArrayList<NameValuePair>(); for(String key : rawParams.keySet()) { params.add(new BasicNameValuePair(key , rawParams.get(key))); } //把List<NameValuePair>所存储的参数放在HTTPPost 对象中 request.setEntity(new UrlEncodedFormEntity(params,"utf_8")); //创建DefaultHttpClient 的对象, DefaultHttpClient client = new DefaultHttpClient(); //在request对象中存储了URL以及要传送到后台去的参数 HttpResponse httpResponse = client.execute(request);</span>在上述代码中可以看到以下几点
1、请求的URL存放在了HttpRequest 对象中,
2、所有的参数首先转化成BasicNameValuePair(Key,value),其中key对应的是参数名,value对应的是参数值,然后把List的BasicNameValuePair集合通过 UrlEncodeFormEntity()实现编码的设置,不然有可能会出现乱码的情况
3、创建的DefaultHttpClient的对象,执行HttpRequest对象中的URL以及参数传递
那么在服务器端如何接受安卓端传过来的参数呢?
<span style="font-size:12px;">package com.androidweb.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // super.doGet(req, resp); doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if (null == req) { return; } resp.setContentType("text/html;charset=utf-8"); req.setCharacterEncoding("utf-8"); // 获取android传过来的参数 String username = req.getParameter("UserEmail"); String password = req.getParameter("UserPassword"); // 进行逻辑判断 int result = -1; if (username.equals("admin")) { if (password.equals("123456")) { result = 0; // /< 正确 } else { result = 2; // /< 密码错误 } } else { result = 1; // /< 用户名错误 } // 把逻辑判断结果传送到安卓端 resp.setCharacterEncoding("utf-8"); PrintWriter out = resp.getWriter(); out.println(result); out.flush(); out.close(); } }</span>
通过doPost中的HttpServletRequest 的对象,通过getParamerter()方法,获取相应的参数值,然后进行逻辑处理
二、服务器端的数据传送到android端
如代码,把Result结果传送到android端
<span style="font-size:12px;">// 把逻辑判断结果传送到安卓端 resp.setCharacterEncoding("utf-8"); PrintWriter out = resp.getWriter(); out.println(result); out.flush(); out.close();</span>那么,在android端是如何接收的呢?以下是android端的代码:
//在request对象中存储了URL以及要传送到后台去的参数 <span style="font-size:12px;"> HttpResponse httpResponse = client.execute(request); if (httpResponse.getStatusLine() .getStatusCode() == 200) { String result = EntityUtils.toString(httpResponse.getEntity()); }</span>在android端传送数据到服务其端时,会返回一个HttpResponse的对象,在这个对象中,包含着服务器端传送到android端的数据,通过HttpResponse对象中的getEntity()的方法,可以取出服务器端传过来的参数。
好了,大致介绍的就是这些,在前后端进行数据通信时,出现了些问题,就是地址参数都是对的,但是就是连接不到服务器端,最后通过ping 服务器端才发现,我的服务器端是处于局域网中,android平板连接的是外网的wifi,不在一个网段,所以连接不上,,最后调整android平板WiFi,连接到局域网中的wifi,问题顺利解决\(^o^)/~。
源代码下载地址:
http://download.csdn.net/detail/oyeshuier/8536135
相关文章推荐
- Android Telephony系统 之 DataConnectionTracker与MobileDataStateTracker之间的通信
- 系统入门(4):Android Service与Activity之间通信的几种方式
- 在Android系统使用socket在Java层和native之间数据通信
- 在Android系统使用socket在Java层和native之间数据通信
- Android客户端与Tomcat服务器通信实现登录验证
- 远程服务实现android系统中的线程之间的通信
- Android与PHP之间的网络通信Http篇(用户登录验证post传值)
- 在Android系统使用socket在Java层和native之间数据通信
- Android Telephony系统 之 DataConnectionTracker与MobileDataStateTracker之间的通信
- 在Android系统使用socket在Java层和native之间数据通信
- Android系统使用socket在Java层和native之间数据通信
- [原创] 在Android系统使用socket在framework和native之间通信
- AllJoyn, Android 平台 设备之间通信开源库
- 从Android中Activity之间的通信说开来
- Android软件开发之应用程序之间的通信介绍(九)
- Android软件开发之应用程序之间的通信介绍(九)
- android系统访问自己的tomcat服务器下的项目不能访问的原因
- Android 获取当前系统时间 时间之间的转换 判断字符串是否日日期类型
- 从Android中Activity之间的通信说开来
- Android系统的组件的通信