android+okhttp+java服务端(tomcat)+mysql实现登录注册
先上代码(文章结尾有遇到的问题和对应解决方案)
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实现登录注册相关推荐
- Android端+Java服务端+servlet+MySQL二手商城设计
项目地址: Android端+Java服务端+servlet+MySQL二手商城设计.zip-Android文档类资源-CSDN下载 项目简介及内容截图如下: 本系统适用于计算机专业作为期末课程设计. ...
- android客户端访问服务端tomcat
为什么80%的码农都做不了架构师?>>> 首先,服务器端已经存在一个项目,该项目基于SSH,已经部署在tomcat上并且正在运行了.我在这个项目的action层新建了一个包,该 ...
- 婚恋交友约会app源码一对一一对多直播APP源码+android客户端+java服务端源码
一对一直播"它是移动直播时代的产物,随着5G移动互联网时代的到来,和智能手机普及化,以前被压抑的全民直播需求,尚需一个引爆点引爆,一对多的直播模式已不能满足大众的需求,他们渴望更多的互动性与 ...
- mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题
mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题 mysql中保存4字节长度的UTF-8字符(例如emoji表情),就需要使用 utf8mb4 字符集. 如果要写入emoj ...
- 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互
基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互 一.前言 1.Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.exam ...
- 在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库)
在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库) 完整的项目已上传github仓库,链接在文章最下面 注:笔者在安卓客户端部分写了kotlin语言和java语 ...
- 【Android 开发】: Android客户端与服务端之间使用JSON交互数据。
在前面的两讲中,我们讲解了JSON数据格式的一些基本知识,以及做一些小Demo,这一讲我们在前面的基础上来做一个综合的可扩展的Demo,主要是针对Android客户端解析服务端传递过来的JSON数据. ...
- 西安尚学堂Java 服务端入门(资料推荐)
现在互联网上资源丰富,Java 学习并不难.贴个 Java 服务端入门和进阶指南,是给新人入门用的,包括了学习目标.需要掌握的技能和参考资料,并规划了学习阶段和时间,希望帮助到大家. 前言 关于如何获 ...
- Flex通信-Java服务端通信实例
Flex与Java通信的方式有很多种,比较常用的有以下方式: WebService:一种跨语言的在线服务,只要用特定语言写好并部署到服务器,其它语言就可以调用 HttpService:通过http请求 ...
最新文章
- BEM 实战之微信个人页面
- 公积金贷款不受影响 组合贷款有特殊
- python在日常工作处理中的应用-记 Python 在实际工作中的第一次应用
- 八. 输入输出(IO)操作6.文件与目录管理
- qvector 结构体排序_C++结构体的应用_YCOJ
- Dictionary To Dynamic
- 通过operator部署redis集群(ucloud版)
- Maximum Element In A Stack 数据结构
- Python中令人头疼的变量作用域问题,终于弄清楚了
- 引起LC.exe exited with code -1的两个场景
- grep和egrep的一些简单用法
- 那么温暖http合约,入门。
- 换行 输出txt_编程短文:Bash echo如何原生输出带空格的字符串而不换行
- Javascript各种运算符第五课(小一节)
- MySQL使用存储过程造数据
- Visio方向键无法移动对象的解决办法[笔记本版]
- java 压缩文件夹有几率压缩失败,打开显示不可预料的末端且用其他专业软件解压文件没压缩完全
- 小朋友把游戏藏在计算机里,给两、三岁宝宝的60个超简单家庭早教游戏
- Vue给每个v-for的元素设置不同的点击事件
- Git Bash 下进行快速复制粘贴