您的位置:首页 > 运维架构 > Tomcat

android中与tomcat之间的通信--登录系统

2015-03-26 16:18 393 查看
项目中一直是用wcf作为android端与services端的通信,但是作为大家普遍的通信方式不是很了解,就做了一个小型的登录系统,一天多的调试终于把前后端的连接调试成功了。这里大致的讲解下前段代码和后端代码是如何关联的。

在这个登录系统中有两条线,一条是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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: