由于当前智能手机的普及,且智能手机中Android用户占的比重也越来越大,这也就意味着有越来越多的人使用Android操作系统的手机。然而越来越多的网站论坛也都随即开发了自己的Android客户端,如网易、新浪新闻Android客户端以及百度贴吧、天涯、豆瓣Android客户端。对这些有人会说我不装客户端,用手机浏览器也可以进这些网站论坛啊,这的确是可以的。我们就用手机浏览器也可以访问这些论坛和网站的。

那随之而来的问题就是:我们为什么要开发一款Android客户端呢?对于这个问题,我想说明一下开发一款Android客户端有以下的几点好处:首先客户端确定性强,也就是我们进哪个网站的客户端,我看到就只是这个网站的信息,而不会看到其他网站的信息;再者,客户端容易定制,不管网站的界面开发的怎么样,在客户端上我们完全可以重新定义数据显示样式和各个界面;还有一点,客户端可以增加我们网站的流量,一个好的客户端相对于浏览器可以吸收更多的用户访问。上面简单说了开发一款客户端的几点好处,那如何为自己的网站开发一款Android客户端呢,接下来我们就来系统的介绍一下如何开发一个网站的Android客户端。

我们接下来的介绍将分节展开,首先我们今天讲到就是关于我们如何通过Android客户端来访问我们的服务器,也就是如何实现Android客户端与服务器的交互。这里说名一下我们使用的服务器端是Tomcat,数据库是使用的MySQL,然后整个网站是基于Java EE开发的,使用的开发模式是Jsp+Servlet。我们的网站是一个基于Java EE开发的一个专卖儿童用品的购物网站。那我们看一下我们的网站的主页效果,如下图所示:

android客户端指什么 android手机客户端什么意思_java

我们这里的数据库包括的表有:记录商品信息的Product(商品)表,还有记录用户信息的User(用户)表,还有用于产品分类的Type(类型)表,以及用于购物车功能的Oder(订单)表。整个网站的基本功能在这里我们就不具体介绍了,我们主要讲解如何开发其Android客户端。

首先我们考虑如何通过Android客户端来实现用户登录的功能。我们要实现登录,那么在数据库这端我们需要查询的表即是User(用户)表,通过对用户登录时输入的用户名的“密码”字段的查询,来判断其输入的密码是否与查询的密码一致,若一致则登录成功,若不一致或查询的密码结果返回为空,则说明输入密码错误或者该用户名未注册,那么登录失败。所以我们可以对请求端返回对应的信息。如下代码我们在服务器端建立一个Servlet用于用户登录的逻辑操作。我们给这个文件命名为:UserServlet.java,然后下面就是我们这个Servlet的具体实现代码:

package com.wust.babyhousing.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;
import javax.servlet.http.HttpSession;
import com.wust.babyhousing.dao.UserDao;
import com.wust.babyhousing.daoimpl.UserDaoImpl;
import com.wust.babyhousing.entity.User;
public class UserServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");//设置编码格式
request.setCharacterEncoding("UTF-8");
String uName=request.getParameter("userName");//获取用户名
String uPass=request.getParameter("pwd");//获取密码
String client="pc";//pc为默认客户端类型
//获取客户端类型
if(request.getParameter("client")!=null)client=request.getParameter("client");
String mgs="";
UserDao userDao=new UserDaoImpl();
User user=userDao.findUser(uName);
if(user!=null&&user.getuPass()!=null&&user.getuPass().equals(uPass)){
if(client.equals("android")){//如果为Android客户端,则返回true,表示登录成功
PrintWriter out = response.getWriter();
out.print("true");
}else{//如果不是Android客户端,则跳转到登录成功的页面
HttpSession session=request.getSession();
session.setAttribute("user", user);
mgs="index.jsp";
request.getRequestDispatcher(mgs).forward(request, response);
}
}else{
if(client.equals("android")){//如果为Android客户端,则返回false,表示登录失败
PrintWriter out = response.getWriter();
out.print("false");
}else{//如果不是Android客户端,这显示登录失败的页面
mgs="login.jsp";
request.getRequestDispatcher(mgs).forward(request, response);
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);//调用doGet方法
}
}

在这里我们看到这里面传来的参数不只是有两个,还包括一个表示客户端类型的参数。也就是代码中的client这个String变量,它获取的是当前的客户端类型,我们默认的客户端类型为PC端,若是Android客户端登录我们会拿到“android”这个值,所以我们就可以返回不同的数据到对应客户端。若是PC端的客户端,我们就会跳转到对应的界面。而若是Android客户端,我们会返回true和false来判断到底是登录成功了,还是登录失败。其中在这个Servlet中我们使用到了一个我们自定义的类UserDao,对于这个类主要是用于我们的服务器与数据交互,我们通过findUser(uName)这个方法可以获取对于用户名的用户类的实体。这些类的及方法的源码大家完全可以自己实现,所以在这里我们就不在贴出了。那么我们可以看看Android客户端的源码该如何实现,下面是我们用户登录的部分源码:

public String send() {// 连接服务器,验证登录
String result = "";
String target = "http://172.16.9.15:8080/babyhousing/UserServlet";//登录验证地址
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpRequest = new HttpPost(target);
List params = new ArrayList();
params.add(new BasicNameValuePair("userName", strName));//用户名
params.add(new BasicNameValuePair("pwd", strPwd));//密码
params.add(new BasicNameValuePair("client", "android"));//Android客户端标识
try {
httpRequest.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
HttpResponse httpResponse = httpclient.execute(httpRequest);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
result += EntityUtils.toString(httpResponse.getEntity());
} else {
result = "请求失败!";
}
} catch (Exception e1) {
e1.printStackTrace();
}
return result;//返回结果
}

这是我们验证用户登录的一个方法,我们通过调用这个方法来实现登录验证。我们会把调用send()方法的结果放到一个String变量str里面。然后下面就是开始判断登录是否成功的步骤了。其中我们要注意上面服务器的登录验证地址,若是写错容易拿不到结果或者无法登录成功。我们要判断是否登录成功,只要调用一下str.contains("true"),也就是判断contains中是否包含“true”,若包含则显示登录成功,否则登录失败。我们做的是一个购物网站,做的是一个登录付款的功能,如下图我们就是登录付款的页面截图:

android客户端指什么 android手机客户端什么意思_客户端_02

 

android客户端指什么 android手机客户端什么意思_java_03

通过上面的截图以及源码我们可以看到,我们由Android客户端登录服务器,其实不是很复杂,我们主要是实现在Android客户端这边将用户输入的信息进行简单处理,再通过网络传给服务器,服务器接到我们客户端的处理将会进行相应的处理操作。这些操作我们在Servlet里面实现就可以了。

好了,本节介绍到此结束,若还有问题可以留言,对于以上实现有兴趣的同学可以自己动手试试,尝试自己去实现一下。希望你会有收获!那么我们后续问题再讨论,谢谢!