先上代码(文章结尾有遇到的问题和对应解决方案)

android客户端

>android:app-build.gradle

1.添加okhttp依赖,具体根据自己的okhttp包来决定

dependencies {...implementation 'com.squareup.okhttp3:okhttp:3.10.0'implementation 'com.squareup.okio:okio:1.5.0'
}

>android:app-src-res

1.新建XML文件,文件名network_security_config

<?xml version="1.0" encoding="utf-8"?>
<network-security-config><base-config cleartextTrafficPermitted="true" />
</network-security-config>

>android:AndroidManifast.xml

1.添加网络权限

<uses-permission android:name="android.permission.INTERNET" />

2.添加网络配置第1步和第2步

<application
...
android:usesCleartextTraffic="false"
android:networkSecurityConfig="@xml/network_security_config">

>android:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:layout_margin="10dp">
<EditTextandroid:id="@+id/loginAccount_etext"android:layout_width="match_parent"android:layout_height="wrap_content"android:maxLines="1"android:hint="请输入账号"/>
<EditTextandroid:id="@+id/loginPassword_etext"android:layout_width="match_parent"android:layout_height="wrap_content"android:maxLines="1"android:hint="请输入密码"/>
<LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/loginBtn"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="登录"/><Buttonandroid:id="@+id/registerBtn"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="注册"/>
</LinearLayout>
</LinearLayout>

>android:MainActivity.java

package com.example.okhttptest;import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private EditText loginAccount_etext;private EditText loginPassword_etext;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);loginAccount_etext = findViewById(R.id.loginAccount_etext);loginPassword_etext = findViewById(R.id.loginPassword_etext);Button loginBtn = findViewById(R.id.loginBtn);Button registerBtn = findViewById(R.id.registerBtn);registerBtn.setOnClickListener(this);loginBtn.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.loginBtn:String loginAddress="http://192.168.1.104:9977/Okhttptest/LoginServlet?";//http://电脑ip地址:tomcat端口号/java项目名/类名?String loginAccount = loginAccount_etext.getText().toString();String loginPassword = loginPassword_etext.getText().toString();loginWithOkHttp(loginAddress,loginAccount,loginPassword);break;case R.id.registerBtn:String registerAddress="http://192.168.1.104:9977/Okhttptest/RegisterServlet?";//http://电脑ip地址:tomcat端口号/java项目名/类名?String registerAccount = loginAccount_etext.getText().toString();String registerPassword = loginPassword_etext.getText().toString();registerWithOkHttp(registerAddress,registerAccount,registerPassword);break;default:break;}}//实现登录public void loginWithOkHttp(String address,String account,String password){HttpUtil.loginWithOkHttp(address,account,password, new Callback() {@Overridepublic void onFailure(Call call, IOException e) {//在这里对异常情况进行处理}@Overridepublic void onResponse(Call call, Response response) throws IOException {//得到服务器返回的具体内容final String responseData = response.body().string();runOnUiThread(new Runnable() {@Overridepublic void run() {if (responseData.equals("true")){Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();}else{Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show();}}});}});}//实现注册public void registerWithOkHttp(String address,String account,String password){HttpUtil.registerWithOkHttp(address, account, password, new Callback() {@Overridepublic void onFailure(Call call, IOException e) {//在这里对异常情况进行处理}@Overridepublic void onResponse(Call call, Response response) throws IOException {final String responseData = response.body().string();runOnUiThread(new Runnable() {@Overridepublic void run() {if (responseData.equals("true")){Toast.makeText(MainActivity.this,"注册成功",Toast.LENGTH_SHORT).show();}else{Toast.makeText(MainActivity.this,"注册失败",Toast.LENGTH_SHORT).show();}}});}});}
}

>android:HttpUtil.java

package com.example.okhttptest;import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;class HttpUtil {//登录static void loginWithOkHttp(String address,String account,String password,okhttp3.Callback callback){OkHttpClient client = new OkHttpClient();RequestBody body = new FormBody.Builder().add("loginAccount",account).add("loginPassword",password).build();Request request = new Request.Builder().url(address).post(body).build();client.newCall(request).enqueue(callback);}//注册static void registerWithOkHttp(String address,String account,String password,okhttp3.Callback callback){OkHttpClient client = new OkHttpClient();RequestBody body = new FormBody.Builder().add("registerAccount",account).add("registerPassword",password).build();Request request = new Request.Builder().url(address).post(body).build();client.newCall(request).enqueue(callback);}
}

mysql数据库

>新建数据库lolbox,新建表userinfo(两个字段:(varchar2)account和(varchar2)password)

java服务端

>新建Dynamic Web Project项目

>添加mysql-connector-java-8.0.28.jar包

根据自己的下载的版本为主

>在WebContent文件夹下新建index.jsp文件

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><h1>服务端已开启</h1></body>
</html>

>创建com.henuajy.Entity包,User.java

package com.henuajy.Entity;public class User {private String loginAccount;private String loginPassword;public User(String loginAccount,String loginPassword){this.loginAccount = loginAccount;this.loginPassword = loginPassword;}public String getLoginAccount() {return loginAccount;}public void setLoginAccount(String loginAccount) {this.loginAccount = loginAccount;}public String getLoginPassword() {return loginPassword;}public void setLoginPassword(String loginPassword) {this.loginPassword = loginPassword;}
}

>创建com.henuajy.Model包,LoginModel.java

package com.henuajy.Model;import com.henuajy.Entity.User;
import java.sql.*;public class LoginModel {private static String DBUNAME = "root";private static String DBUPWD = "1911411206";//输入自己的mysql数据库的密码private static String DRIVER = "com.mysql.cj.jdbc.Driver";private static String URL = "jdbc:mysql://localhost:3306/lolbox?"+ "serverTimezone=UTC"+ "&useUnicode=true&characterEncoding=utf-8"+ "&zeroDateTimeBehavior=convertToNull"+ "&useSSL=false"+ "&allowPublicKeyRetrieval=true";/*URL="jdbc:mysql://localhost:3306/数据库名(?设置时区/指定字符的编码、解码格式/在操作各项值均为0时,转化为null/禁用SSL/允许客户端从服务器获取公钥)"*/public static boolean login(User user){String loginAccount = user.getLoginAccount();String loginPassword = user.getLoginPassword();Connection con = null;PreparedStatement pstmt = null;ResultSet rs = null;int count = 0;try{Class.forName(DRIVER);con = DriverManager.getConnection(URL,DBUNAME,DBUPWD);pstmt = con.prepareStatement("select count(*)from userinfo where account=? and password=?");pstmt.setString(1,loginAccount);pstmt.setString(2,loginPassword);rs = pstmt.executeQuery();if (rs.next()){count = rs.getInt(1);System.out.println("链接成功");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally {try{if (rs!=null){rs.close();}if (pstmt!=null){pstmt.close();}if (con!=null){con.close();}} catch (SQLException e) {e.printStackTrace();}if (count==1){return true;}else{return false;}}}public static boolean register(User user){String loginAccount = user.getLoginAccount();String loginPassword = user.getLoginPassword();Connection con = null;PreparedStatement pstmt = null;ResultSet rs = null;int count = 0;try{Class.forName(DRIVER);con = DriverManager.getConnection(URL,DBUNAME,DBUPWD);pstmt = con.prepareStatement("insert into userinfo values (?,?)");pstmt.setString(1,loginAccount);pstmt.setString(2,loginPassword);count = pstmt.executeUpdate();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally {try{if (rs!=null){rs.close();}if (pstmt!=null){pstmt.close();}if (con!=null){con.close();}} catch (SQLException e) {e.printStackTrace();}if (count==1){return true;}else{return false;}}}
}

>创建com.henuajy.Servlet包

>LoginServlet.java

package com.henuajy.Servlet;import com.henuajy.Entity.User;
import com.henuajy.Model.LoginModel;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet(name = "LoginServlet",value = "/LoginServlet")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");String loginAccount = request.getParameter("loginAccount");String loginPassword = request.getParameter("loginPassword");User user = new User(loginAccount,loginPassword);boolean result = LoginModel.login(user);System.out.println("登录账号:"+loginAccount+",登陆密码:"+loginPassword+",登录结果"+result);response.setCharacterEncoding("UTF-8");//通过PrintWriter返回给客户端操作结果PrintWriter writer = response.getWriter();writer.print(result);}
}

>RegisterServlet.java

package com.henuajy.Servlet;import com.henuajy.Entity.User;
import com.henuajy.Model.LoginModel;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet(name = "RegisterServlet",value = "/RegisterServlet")
public class RegisterServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//request.setCharacterEncoding("utf-8");String registerAccount = request.getParameter("registerAccount");String registerPassword = request.getParameter("registerPassword");User registerUser = new User(registerAccount,registerPassword);boolean rs = LoginModel.register(registerUser);System.out.println("注册账号:"+registerAccount+",注册密码:"+registerPassword+",注册结果"+rs);//通过PrintWriter返回给客户端操作结果PrintWriter writer = response.getWriter();writer.print(rs);}
}

遇到的问题

安装mysql

我参考的答案

PS:mysql最基础的是黑框版如下,可以下载可视化工具如Navicat等,也可以不下。

java链接mysql的jar包

官网下载

电脑ip地址

Windows+R输入cmd,输入ipconfig。如果是宽带联网就是以太网的IPv4 地址;如果是WiFi链接就是无线局域网的IPv4 地址

链接服务端时填写的端口号

String loginAddress="http://192.168.1.104:9977/Okhttptest/LoginServlet?";

因为是Tomcat发布所以端口号要以这个为准,不一定是8080

如果发现有内容错误处,评论指出,教学相长,感激不尽。
有其他疑问,指出即讨论改正。

android+okhttp+java服务端(tomcat)+mysql实现登录注册相关推荐

  1. Android端+Java服务端+servlet+MySQL二手商城设计

    项目地址: Android端+Java服务端+servlet+MySQL二手商城设计.zip-Android文档类资源-CSDN下载 项目简介及内容截图如下: 本系统适用于计算机专业作为期末课程设计. ...

  2. android客户端访问服务端tomcat

    为什么80%的码农都做不了架构师?>>>    首先,服务器端已经存在一个项目,该项目基于SSH,已经部署在tomcat上并且正在运行了.我在这个项目的action层新建了一个包,该 ...

  3. 婚恋交友约会app源码一对一一对多直播APP源码+android客户端+java服务端源码

    一对一直播"它是移动直播时代的产物,随着5G移动互联网时代的到来,和智能手机普及化,以前被压抑的全民直播需求,尚需一个引爆点引爆,一对多的直播模式已不能满足大众的需求,他们渴望更多的互动性与 ...

  4. mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题

    mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题 mysql中保存4字节长度的UTF-8字符(例如emoji表情),就需要使用 utf8mb4 字符集. 如果要写入emoj ...

  5. 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互

    基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互 一.前言 1.Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.exam ...

  6. 在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库)

    在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库) 完整的项目已上传github仓库,链接在文章最下面 注:笔者在安卓客户端部分写了kotlin语言和java语 ...

  7. 【Android 开发】: Android客户端与服务端之间使用JSON交互数据。

    在前面的两讲中,我们讲解了JSON数据格式的一些基本知识,以及做一些小Demo,这一讲我们在前面的基础上来做一个综合的可扩展的Demo,主要是针对Android客户端解析服务端传递过来的JSON数据. ...

  8. 西安尚学堂Java 服务端入门(资料推荐)

    现在互联网上资源丰富,Java 学习并不难.贴个 Java 服务端入门和进阶指南,是给新人入门用的,包括了学习目标.需要掌握的技能和参考资料,并规划了学习阶段和时间,希望帮助到大家. 前言 关于如何获 ...

  9. Flex通信-Java服务端通信实例

    Flex与Java通信的方式有很多种,比较常用的有以下方式: WebService:一种跨语言的在线服务,只要用特定语言写好并部署到服务器,其它语言就可以调用 HttpService:通过http请求 ...

最新文章

  1. BEM 实战之微信个人页面
  2. 公积金贷款不受影响 组合贷款有特殊
  3. python在日常工作处理中的应用-记 Python 在实际工作中的第一次应用
  4. 八. 输入输出(IO)操作6.文件与目录管理
  5. qvector 结构体排序_C++结构体的应用_YCOJ
  6. Dictionary To Dynamic
  7. 通过operator部署redis集群(ucloud版)
  8. Maximum Element In A Stack 数据结构
  9. Python中令人头疼的变量作用域问题,终于弄清楚了
  10. 引起LC.exe exited with code -1的两个场景
  11. grep和egrep的一些简单用法
  12. 那么温暖http合约,入门。
  13. 换行 输出txt_编程短文:Bash echo如何原生输出带空格的字符串而不换行
  14. Javascript各种运算符第五课(小一节)
  15. MySQL使用存储过程造数据
  16. Visio方向键无法移动对象的解决办法[笔记本版]
  17. java 压缩文件夹有几率压缩失败,打开显示不可预料的末端且用其他专业软件解压文件没压缩完全
  18. 小朋友把游戏藏在计算机里,给两、三岁宝宝的60个超简单家庭早教游戏
  19. Vue给每个v-for的元素设置不同的点击事件
  20. Git Bash 下进行快速复制粘贴

热门文章

  1. linux命令解压文件到指定目录并覆盖,你不知道的Linux解压命令
  2. jQuery面试题常见
  3. 科学家用钻石存储数据,未来婚纱照将可被存储在钻戒中
  4. iPhone降价,国产手机或受伤
  5. 看完做不好百度爱采购你打我!
  6. 百度地图 geohash 可视化工具
  7. 如何以互联网思维改造传统烟酒店
  8. 散粉在哪个步骤用_散粉是在哪个步骤用
  9. mysql数据库连接不释放问题
  10. Android微信界面的制作