Android客户端与Tomcat服务器通信实现登录验证
16lz
2021-01-23
一.功能描述
在Android客户端实现登录界面,当将用户名和密码填入文本框并点击登录按钮时,将认证信息传送至Tomcat服务器进行认证,若用户名和密码匹配,则Android客户端提示登录成功,否则提示登陆失败。
二.开发环境
Android客户端:Android Studio2.2.3
服务器端:MyEclipse2016 + Tomcat9.0
三.详细过程
(1)Android客户端的开发
①
新建一个名为LoginGuest的工程,该工程只包含LoginActivity和LoginToServer两个类,其中LoginToServer对象在LoginActivity中被调用,实现向服务器的信息传递。在AndroidManifest.xml中添加网络权限:
实现LoginActivity的布局文件activity_login.xml的布局:
<?xml version="1.0" encoding="utf-8"?>
效果如下:
②
写GuestToServer类
package com.example.leidong.loginguest;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;/** * Created by leido on 2017/2/15. */public class GuestToServer { //由于Tomcat服务器部署在本地,url为本地Tomcat服务的url,IP地址为本地主机IP地址 private String url = "http://XXX.XXX.XXX.XXX:8080/LoginServer/LoginServlet"; //服务器返回的结果 String result = ""; /** * 使用Post方式向服务器发送请求并返回响应 * @param username 传递给服务器的username * @param password 传递给服务器的password * @return */ public String doPost(String username, String password) throws IOException { HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); //将username与password参数装入List中 NameValuePair param1 = new BasicNameValuePair("username", username); NameValuePair param2 = new BasicNameValuePair("password", password); List params = new ArrayList(); params.add(param1); params.add(param2); //将参数包装如HttpEntity中并放入HttpPost的请求体中 HttpEntity httpEntity = new UrlEncodedFormEntity(params, "GBK"); httpPost.setEntity(httpEntity); HttpResponse httpResponse = httpClient.execute(httpPost); //如果响应成功 if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ //得到信息体 HttpEntity entity = httpResponse.getEntity(); InputStream inputStream = entity.getContent(); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); String readLine = null; while((readLine = br.readLine()) != null){ result += readLine; } inputStream.close(); return result; } //响应失败 else{ return "Error"; } }}
注意Android6.0之后SDK不支持HttpClient,此时需要在build.gradle中的android{......}中
加入如下代码:
③
写LoginActivity类
package com.example.leidong.loginguest;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.io.IOException;public class LoginActivity extends AppCompatActivity { //登录用户名输入框 private EditText et_username; //登录密码输入框 private EditText et_password; //登录按钮 private Button bt_login; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); //获取组件 init(); //对登录按钮的点击监控 bt_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Handler myHandler = new Handler(){ public void handleMessage(Message msg){ String responseResult = (String)msg.obj; //登录成功 if(responseResult.equals("true")){ Toast.makeText(LoginActivity.this, "登录成功!", Toast.LENGTH_LONG).show(); } //登录失败 else{ Toast.makeText(LoginActivity.this, "登录失败!", Toast.LENGTH_LONG).show(); } } }; new Thread(new Runnable() { @Override public void run() { GuestToServer guestToServer = new GuestToServer(); try { String result = guestToServer.doPost(et_username.getText().toString().trim(), et_password.getText().toString().trim()); Message msg = new Message(); msg.obj = result; myHandler.sendMessage(msg); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }); } /** * 获取组件 */ private void init() { et_username = (EditText)findViewById(R.id.et_username); et_password = (EditText)findViewById(R.id.et_password); bt_login = (Button)findViewById(R.id.bt_login); }}
(2)MyEclipse、Tomcat服务器端的开发
①
新建一个Java Web工程,新建一个名为LoginServlet的Servlet, 修改器deGet()方法,,代码如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html");PrintWriter out = response.getWriter();String username = request.getParameter("username");String password = request.getParameter("password");if("hahaha".equals(username) && "123456".equals(password)){ out.print(true);}else{out.print(false);}}
默认的正确用户名为hahaha,正确密码为123456 ②
此时打开服务器在后台看到其已经运行
四.运行结果
(1)输入错误的用户名或密码
(2)输入正确的用户名和密码
更多相关文章
- android实现密码框右侧显示小眼睛
- json解析android客户端源码
- android:服务器和客户端通信2
- JS判断客户端是否是iOS或者Android
- 《淘宝客户端 for Android》项目实战 html webkit android css3
- Android:密码显示隐藏
- 【Android增量升级系列_01】 浅谈Android增量更新客户端的实现方
- Android 创建服务器 NanoHttpd
- 【Android】socket通信【客户端访问】