Android Studio 实现登录注册-源代码 二(Servlet + 连接MySql数据库)
发布日期:2021-06-29 15:04:16 浏览次数:3 分类:技术文章

本文共 15063 字,大约阅读时间需要 50 分钟。

一、Android 项目当中设置明文传输

1、设置明文传输的xml

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、引入上述创建的xml

在这里插入图片描述

android:networkSecurityConfig="@xml/network_security_config"

二、在MyEclipse当中创建Web项目

1、创建项目

在这里插入图片描述

引入MySQL的驱动包
在这里插入图片描述

2、创建实体类User

在这里插入图片描述

package entity;public class User {
private int id; private String name; private String username; private String password; private int age; private String phone; public User() {
} public User(int id, String name, String username, String password, int age, String phone) {
this.id = id; this.name = name; this.username = username; this.password = password; this.age = age; this.phone = phone; } public int getId() {
return id; } public void setId(int id) {
this.id = id; } public String getName() {
return name; } public void setName(String name) {
this.name = name; } public String getUsername() {
return username; } public void setUsername(String username) {
this.username = username; } public String getPassword() {
return password; } public void setPassword(String password) {
this.password = password; } public int getAge() {
return age; } public void setAge(int age) {
this.age = age; } public String getPhone() {
return phone; } public void setPhone(String phone) {
this.phone = phone; }}

3、创建JDBCUtils工具类

在这里插入图片描述

package dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class JDBCUtils {
static {
try {
Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) {
e.printStackTrace(); } } public static Connection getConn() {
Connection conn = null; try {
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test","root","root"); }catch (Exception exception){
exception.printStackTrace(); } return conn; } public static void close(Connection conn){
try {
conn.close(); } catch (SQLException throwables) {
throwables.printStackTrace(); } }}

4、创建UserDao类

在这里插入图片描述

package dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import entity.User;public class UserDao {
public boolean login(String name,String password){
String sql = "select * from users where name = ? and password = ?"; Connection con = JDBCUtils.getConn(); try {
PreparedStatement pst=con.prepareStatement(sql); pst.setString(1,name); pst.setString(2,password); if(pst.executeQuery().next()){
return true; } } catch (SQLException throwables) {
throwables.printStackTrace(); }finally {
JDBCUtils.close(con); } return false; } public boolean register(User user){
String sql = "insert into users(name,username,password,age,phone) values (?,?,?,?,?)"; Connection con = JDBCUtils.getConn(); try {
PreparedStatement pst=con.prepareStatement(sql); pst.setString(1,user.getName()); pst.setString(2,user.getUsername()); pst.setString(3,user.getPassword()); pst.setInt(4,user.getAge()); pst.setString(5,user.getPhone()); int value = pst.executeUpdate(); if(value>0){
return true; } } catch (SQLException throwables) {
throwables.printStackTrace(); }finally {
JDBCUtils.close(con); } return false; } public User findUser(String name){
String sql = "select * from users where name = ?"; Connection con = JDBCUtils.getConn(); User user = null; try {
PreparedStatement pst=con.prepareStatement(sql); pst.setString(1,name); ResultSet rs = pst.executeQuery(); while (rs.next()){
int id = rs.getInt(1); String namedb = rs.getString(2); String username = rs.getString(3); String passworddb = rs.getString(4); int age = rs.getInt(5); String phone = rs.getString(6); user = new User(id,namedb,username,passworddb,age,phone); } } catch (SQLException throwables) {
throwables.printStackTrace(); }finally {
JDBCUtils.close(con); } return user; }}

5、创建对应的LoginServlet

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

package 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 dao.UserDao;public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name"); String password = request.getParameter("password"); response.setCharacterEncoding("UTF-8"); UserDao dao = new UserDao(); boolean login = dao.login(name, password); String msg = ""; if(login){
msg = "成功"; }else{
msg = "失败"; } PrintWriter out = response.getWriter(); out.println(msg); out.flush(); out.close(); } }

三、在Android Studio当中调用Servlet

(一)实现登录功能

1、创建连接Servlet的工具类(PostUtil)

在这里插入图片描述

在这里插入图片描述

package com.example.application01.utils;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;//访问servletpublic class PostUtil {
//访问的serlver不一样 //传递的参数不一样 public static String Post(String url,String data) {
String msg = ""; try{
//http://ms-yffprtappszi:8080/AndroidWeb/LoginServlet HttpURLConnection conn = (HttpURLConnection) new URL("http://10.0.2.2:8080/AndroidWeb/"+url).openConnection(); //设置请求方式,请求超时信息 conn.setRequestMethod("POST"); conn.setReadTimeout(5000); conn.setConnectTimeout(5000); //设置运行输入,输出: conn.setDoOutput(true); conn.setDoInput(true); //Post方式不能缓存,需手动设置为false conn.setUseCaches(false); //我们请求的数据: //获取输出流 OutputStream out = conn.getOutputStream(); out.write(data.getBytes()); out.flush(); if (conn.getResponseCode() == 200) {
// 获取响应的输入流对象 InputStream is = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuffer response = new StringBuffer(); String line=null; while ((line = reader.readLine()) != null) {
response.append(line); } msg=response.toString(); } }catch(Exception e) {
e.printStackTrace(); } return msg; }}

2、在MainActivity调用这个类

在这里插入图片描述

package com.example.application01;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.widget.EditText;import android.widget.Toast;import com.example.application01.dao.UserDao;import com.example.application01.utils.PostUtil;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void reg(View view){
startActivity(new Intent(getApplicationContext(),RegisterActivity.class)); } public void login(View view){
EditText EditTextname = (EditText)findViewById(R.id.name); EditText EditTextpassword = (EditText)findViewById(R.id.password); new Thread(){
@Override public void run() {
String data=""; try {
data = "name="+ URLEncoder.encode(EditTextname.getText().toString(), "UTF-8")+ "&password="+ URLEncoder.encode(EditTextpassword.getText().toString(), "UTF-8"); } catch (UnsupportedEncodingException e) {
e.printStackTrace(); } String request = PostUtil.Post("LoginServlet",data); int msg = 0; if(request.equals("成功")){
msg = 1; } hand1.sendEmptyMessage(msg); } }.start(); } final Handler hand1 = new Handler() {
@Override public void handleMessage(Message msg) {
if(msg.what == 1) {
Toast.makeText(getApplicationContext(),"登录成功",Toast.LENGTH_LONG).show(); } else {
Toast.makeText(getApplicationContext(),"登录失败",Toast.LENGTH_LONG).show(); } } };}

在开启web项目的情况下运行Android项目

在这里插入图片描述

(二)实现注册功能

1、在web工程当中创建RegisterServlet

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package 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 dao.UserDao;import entity.User;public class RegisterServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("-----------------"); response.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); String username = request.getParameter("username"); String password = request.getParameter("password"); String phone = request.getParameter("phone"); int age = Integer.parseInt(request.getParameter("age")); User user = new User(); user.setName(name); user.setUsername(username); user.setPassword(password); user.setAge(age); user.setPhone(phone); String msg = ""; UserDao userDao = null; User uu = null; userDao = new UserDao(); uu = userDao.findUser(user.getName()); boolean flag = false; if(uu == null){
flag = userDao.register(user); } if(flag){
msg = "成功"; }else{
msg = "失败"; } if(uu != null) {
msg = "已存在"; } PrintWriter out = response.getWriter(); out.println(msg); out.flush(); out.close(); }}

2、在Android当中的RegisterActivity访问Servlet

在这里插入图片描述

package com.example.application01;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.widget.EditText;import android.widget.Toast;import com.example.application01.dao.UserDao;import com.example.application01.entity.User;import com.example.application01.utils.PostUtil;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;public class RegisterActivity extends AppCompatActivity {
EditText name = null; EditText username = null; EditText password = null; EditText phone = null; EditText age = null; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); name = findViewById(R.id.name); username = findViewById(R.id.username); password = findViewById(R.id.password); phone = findViewById(R.id.phone); age = findViewById(R.id.age); } public void register(View view){
String cname = name.getText().toString(); String cusername = username.getText().toString(); String cpassword = password.getText().toString(); System.out.println(phone.getText().toString()); String cphone = phone.getText().toString(); int cgae = Integer.parseInt(age.getText().toString()); if(cname.length() < 2 || cusername.length() < 2 || cpassword.length() < 2 ){
Toast.makeText(getApplicationContext(),"输入信息不符合要求请重新输入",Toast.LENGTH_LONG).show(); return; } User user = new User(); user.setName(cname); user.setUsername(cusername); user.setPassword(cpassword); user.setAge(cgae); user.setPhone(cphone); new Thread(){
@Override public void run() {
String data=""; try {
data = "&name="+ URLEncoder.encode(user.getName(), "UTF-8")+ "&username="+ URLEncoder.encode(user.getUsername(), "UTF-8")+ "&password="+ URLEncoder.encode(user.getPassword(), "UTF-8")+ "&age="+ URLEncoder.encode(user.getAge()+"", "UTF-8")+ "&phone="+ URLEncoder.encode(user.getPhone(), "UTF-8"); } catch (UnsupportedEncodingException e) {
e.printStackTrace(); } String request = PostUtil.Post("RegisterServlet",data); int msg = 0; if(request.equals("成功")){
msg = 2; } //已存在 if(request.equals("已存在")){
msg = 1; } hand.sendEmptyMessage(msg); } }.start(); } final Handler hand = new Handler() {
@Override public void handleMessage(Message msg) {
if(msg.what == 0) {
Toast.makeText(getApplicationContext(),"注册失败",Toast.LENGTH_LONG).show(); } if(msg.what == 1) {
Toast.makeText(getApplicationContext(),"该账号已经存在,请换一个账号",Toast.LENGTH_LONG).show(); } if(msg.what == 2) {
//startActivity(new Intent(getApplication(),MainActivity.class)); Intent intent = new Intent(); //将想要传递的数据用putExtra封装在intent中 intent.putExtra("a","註冊"); setResult(RESULT_CANCELED,intent); finish(); } } };}

在这里插入图片描述

转载地址:https://code100.blog.csdn.net/article/details/116695953 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java SSM 项目实战 day05 用户操作
下一篇:C/C++语言数据结构快速入门(一)(代码解析+内容解析)数据结构基本内容和线性表

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月10日 19时48分40秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

URL 去重的 6 种方案!(附详细代码) 2019-04-29
微软29岁员工年薪税后85W!竟然说自己活得很惨!网友:确实挺惨! 2019-04-29
网易大数据用户画像实践 2019-04-29
一不小心肝出了4W字的Redis面试教程 2019-04-29
拼团活动遇黑产?搭进去了8台服务器... 2019-04-29
干掉 "ZooKeeper"?阿里为什么不用 ZK 做服务发现? 2019-04-29
RocketMQ消息丢失场景及解决办法 2019-04-29
字节跳动新员工入职一周,工作很少,每天很闲,从不加班!公司一堆漂亮小姐姐!完全不像外面说得那么忙!... 2019-04-29
卧槽!「算法刷题宝典」电子书开放下载了! 2019-04-29
为什么MySQL不推荐使用 UUID 或者雪花id作为主键? 2019-04-29
Spring Boot 最流行的 16 条实践解读,值得收藏! 2019-04-29
某程序员为让公司裁掉自己,消极怠工!故意旷工!但公司坚持不裁他,领导:给你发工资,就是不裁你!... 2019-04-29
面试官:你说熟悉MySQL事务,那来谈谈事务的实现原理吧! 2019-04-29
【高并发】Redis如何助力高并发秒杀系统?看完这篇我彻底懂了!! 2019-04-29
《快速搞垮一个技术团队的20个“必杀技”》 2019-04-29
Redis 秒杀实战 2019-04-29
一篇文章搞定大规模容器平台生产落地十大实践 2019-04-29
AI工程师面试屡被拒:比贫穷脱发更恐怖的是,2020年你仍不会…… 2019-04-29
《让系统发生重大宕机事故的15个方法》 2019-04-29
我是Redis,MySQL大哥被我害惨了! 2019-04-29