欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android 仿微信demo——注冊功能實(shí)現(xiàn)(服務(wù)端)

 更新時(shí)間:2021年06月17日 15:40:35   作者:你要永遠(yuǎn)相信光z  
本篇文章主要介紹了微信小程序-閱讀小程序?qū)嵗【幱X得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望能給你們提供幫助

服務(wù)端注冊功能實(shí)現(xiàn)

通過web層完成客戶端和服務(wù)端的數(shù)據(jù)交互(接受數(shù)據(jù),發(fā)送數(shù)據(jù)),service層完成業(yè)務(wù)邏輯(注冊,登錄),dao層操作數(shù)據(jù)庫(要借助工具類)

創(chuàng)建項(xiàng)目

idea創(chuàng)建服務(wù)端項(xiàng)目

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

配置tomcat服務(wù)器

在這里插入圖片描述

在這里插入圖片描述

啟動項(xiàng)目測試服務(wù)器

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

創(chuàng)建web層和客戶端完成數(shù)據(jù)交互

創(chuàng)建Servlet Reigister.java

在這里插入圖片描述

在這里插入圖片描述

Reigister.java

package com.example.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.example.pojo.User;
import com.example.service.UserService;
import com.example.service.UserServiceImpl;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URLDecoder;
@WebServlet(name = "Reiister", value = "/Reigister")
public class Reigister extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /* 設(shè)置中文字符編碼,防止亂碼*/
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("UTF-8");
        //以json數(shù)據(jù)完成操作
        response.setContentType("application/json;charset=UTF-8");
        System.out.println(request.getContentType());// 得到客戶端發(fā)送過來內(nèi)容的類型,application/json;charset=UTF-8
        System.out.println(request.getRemoteAddr());// 得到客戶端的ip地址,
        BufferedReader br = new BufferedReader(new InputStreamReader(// 使用字符流讀取客戶端發(fā)過來的數(shù)據(jù)
                request.getInputStream()));
        String line = null;
        StringBuffer s = new StringBuffer();//StringBuffer String的區(qū)別,如果要對數(shù)據(jù)作頻繁的修改,則用StringBuffer
        // 以一行的形式讀取數(shù)據(jù)
        while ((line = br.readLine()) != null) {
            s.append(line);
        }
        // 關(guān)閉io流
        br.close();
        System.out.println(s.toString());
        //JSON:這是json解析包,idea是沒有的,要我們自己導(dǎo)入
        User user = JSON.parseObject(s.toString(), User.class);//是用了發(fā)射機(jī)制來完成對象的封閉
        //以utf-8解碼操作
        String number = URLDecoder.decode(user.getNumber(), "utf-8");
        String name = URLDecoder.decode(user.getName(), "utf-8");
        String phone = URLDecoder.decode(user.getPhone(), "utf-8");
        String password = URLDecoder.decode(user.getPassword(), "utf-8");
        System.out.println("用戶名是:" + name + ", 密碼;" + password);
        System.out.println(user);
        // 去數(shù)據(jù)庫完成用戶注冊功能
        UserService us = new UserServiceImpl();
        //調(diào)用注冊的方法
        int i = us.reigisterUser(number, name, phone, password);
        boolean rs = false;
        //判斷是否注冊成功
        if (i > 0) {
            System.out.println("注冊成功");
            rs = true;
        }
        //將結(jié)果返回給客戶端	,將結(jié)果構(gòu)建成json數(shù)據(jù)返回給客戶端
        JSONObject rjson = new JSONObject();
        rjson.put("json", rs);
        response.getOutputStream().write(
                rjson.toString().getBytes("UTF-8"));// 向客戶端發(fā)送一個(gè)帶有json對象內(nèi)容的響應(yīng)
    }
}

上面代碼用到用戶實(shí)體類User和json(對數(shù)據(jù)進(jìn)行封裝),后面我們會介紹如何創(chuàng)建和使用,其他的就不闡述了,代碼都有注釋

在創(chuàng)建實(shí)體類之前,先創(chuàng)建一個(gè)包單獨(dú)存放實(shí)體類,因?yàn)楹竺嫖覀冊谕晟乒δ艿倪^程中會創(chuàng)建很多實(shí)體類,方便管理

在這里插入圖片描述

在這里插入圖片描述

User.java

package com.example.pojo;
public class User {
    private int id;
    private String number;
    private String name;
    private String password;
    private String phone;
    private String remark;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", number='" + number + '\'' +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", phone='" + phone + '\'' +
                ", remark='" + remark + '\'' +
                '}';
    }
}

在WEB-INF目錄下創(chuàng)建lib資源庫,把下載好的JSON包復(fù)制到lib目錄下,并把jar包添加到類庫

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

創(chuàng)建service層處理業(yè)務(wù)邏輯功能

微信的除了注冊業(yè)務(wù)邏輯處理功能,還有后面的要完善的登錄,以及微信消息,通訊錄,聊天信息等等,所以我們要用到一種編程思想,面向接口編程思想。創(chuàng)建一個(gè)接口,然后可以在里面添加我們需要業(yè)務(wù)處理的抽象方法(目前只有登錄),之后在接口的實(shí)現(xiàn)類重寫接口方法執(zhí)行具體的操作即可

在上面創(chuàng)建Servlet Reigister.java文件中報(bào)紅的地方按alt+enter鍵創(chuàng)建接口,并放到單獨(dú)的包里

在這里插入圖片描述

在這里插入圖片描述

創(chuàng)建接口的實(shí)現(xiàn)類

在這里插入圖片描述

在這里插入圖片描述

在接口里寫個(gè)注冊的抽象方法

在這里插入圖片描述

在實(shí)現(xiàn)類中重寫接口方法

在這里插入圖片描述

在這里插入圖片描述

在實(shí)現(xiàn)類UserServiceImpl.java中修改代碼

UserServiceImpl.java

package com.example.service;
public class UserServiceImpl implements UserService {
    UserDao ud = new UserDaoImpl();
    @Override
    public int reigisterUser(String number, String name, String phone, String password) {
        int i = ud.insertUser(number, name, phone, password);
        return i;
    }
}

創(chuàng)建dao層操作數(shù)據(jù)庫

方法和創(chuàng)建service層一樣,文字就不敘述了,直接上圖

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在實(shí)現(xiàn)類UserDaoImpl.java中修改代碼

UserDaoImpl.java

package com.example.dao;
public class UserDaoImpl implements UserDao {
    @Override
    public int insertUser(String number, String name, String phone, String password) {
        String sql = "insert into user (number, name, phone, password, remark) values(?,?,?,?,?);";
        //i如果操作成功,就是操作成功的條數(shù)
        int i = JDBCUtil.executeUpdate(sql, number, name, phone, password, "1");
        System.out.println("數(shù)據(jù)庫的條數(shù):");
        return i;
    }
}

通過JDBC工具類訪問數(shù)據(jù)庫

先創(chuàng)建包單獨(dú)存放工具類,后再創(chuàng)建工具類JDBCUtil.java

在這里插入圖片描述

JDBCUtil.java

package com.example.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCUtil {
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://127.0.0.1:3306/androiddb1?useUnicode=true&characterEncoding=utf-8";
    private static final String USER = "root";
    private static final String PASSWORD = "jin1687062650";
    private static Connection ct;
    private static PreparedStatement ps;
    private static ResultSet rs;
    static {
        // 1.加載驅(qū)動,只需要加載一次,所以放到靜態(tài)代碼塊中
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    /**
     * 描述:封裝一個(gè)方法可以獲得連接,目的可以在其他地方之接調(diào)用
     */
    public static Connection getConnection() {
        try {
            ct = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return ct;
    }
    /**
     * 描述:封裝一個(gè)方法可以完成查詢操作
     *
     * @param sql 要查詢的sql語句
     * @param obj 占位符的具體內(nèi)容
     * @return ResultSet 將查詢到的結(jié)果返回
     */
    public static ResultSet executeQuery(String sql, Object... obj) {
        // 1.得到連接
        ct = getConnection();
        // 2.創(chuàng)鍵發(fā)送對象
        try {
            ps = ct.prepareStatement(sql);
            // 處理占位符問題
            if (obj != null) {
                for (int i = 0; i < obj.length; i++) {
                    ps.setObject(i + 1, obj[i]);
                }
            }
            rs = ps.executeQuery();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return rs;
    }
    /**
     * 描述:封裝一個(gè)方法可以完成DDL,DML操作
     *
     * @param sql 要操作的sql語句
     * @param obj 占位符
     * @return
     */
    public static int executeUpdate(String sql, Object... obj) {
        // 1.得到連接
        ct = getConnection();
        // 2.創(chuàng)鍵發(fā)送對象
        try {
            ps = ct.prepareStatement(sql);
            // 處理占位符問題
            if (obj != null) {
                for (int i = 0; i < obj.length; i++) {
                    ps.setObject(i + 1, obj[i]);
                }
            }
            int in = ps.executeUpdate();
            close(ct, ps, null);
            return in;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return 0;
    }
    /**
     * 描述:封裝一個(gè)關(guān)閉資源的方法
     *
     * @param ct 連接對象
     * @param ps 發(fā)送sql語句對象
     * @param rs 返回值對象
     */
    public static void close(Connection ct, PreparedStatement ps, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (ct != null) {
            try {
                ct.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    // 給外部一個(gè)訪問ct,和ps的方法
    public static Connection getCt() {
        return ct;
    }
    public static PreparedStatement getPs() {
        return ps;
    }
}

上面代碼會用到mysql驅(qū)動包,下面給出使用方法

在上面下載的jar包中有mysql的驅(qū)動包,把它復(fù)制到lib下,然后添加到類庫即可,方法和json包的添加一樣

在這里插入圖片描述

mysql中創(chuàng)建數(shù)據(jù)庫和表

可以通過navicat可視化工具創(chuàng)建數(shù)據(jù)庫和表(可以用自己的方法),下面給出我數(shù)據(jù)庫結(jié)構(gòu)

在這里插入圖片描述

在這里插入圖片描述

測試

在服務(wù)端JDBCUtil.java工具類修改數(shù)據(jù)庫名和數(shù)據(jù)庫密碼為自己的

在這里插入圖片描述

在客戶端中把注冊activity的請求服務(wù)器的方法里面的URL的ip地址修改成自己的ip地址

在這里插入圖片描述

查看ip地址的方法

win+R,輸入cmd進(jìn)入命令行,然后輸入ipconfig

在這里插入圖片描述

在這里插入圖片描述

啟動服務(wù)端和客戶端項(xiàng)目測試

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

此時(shí)mysql已成功寫入數(shù)據(jù)

在這里插入圖片描述

總結(jié)

這篇關(guān)于微信demo的文章就到這里了,希望大家可以多多關(guān)注腳本之家的更多精彩內(nèi)容!

相關(guān)文章

最新評論