国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:172日期:2022-06-03 18:43:55
目錄服務(wù)端注冊(cè)功能實(shí)現(xiàn)創(chuàng)建項(xiàng)目創(chuàng)建web層和客戶端完成數(shù)據(jù)交互創(chuàng)建service層處理業(yè)務(wù)邏輯功能創(chuàng)建dao層操作數(shù)據(jù)庫通過JDBC工具類訪問數(shù)據(jù)庫mysql中創(chuàng)建數(shù)據(jù)庫和表測(cè)試總結(jié)服務(wù)端注冊(cè)功能實(shí)現(xiàn)

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

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

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

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

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

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

配置tomcat服務(wù)器

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

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

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

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

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

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

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

創(chuàng)建Servlet Reigister.java

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

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

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-8System.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ū)別,如果要對(duì)數(shù)據(jù)作頻繁的修改,?t用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)入U(xiǎn)ser user = JSON.parseObject(s.toString(), User.class);//是用了發(fā)射機(jī)制?磽瓿啥韻蟮姆獗//以u(píng)tf-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ù)庫完成用戶注冊(cè)功能UserService us = new UserServiceImpl();//調(diào)用注冊(cè)的方法int i = us.reigisterUser(number, name, phone, password);boolean rs = false;//判斷是否注冊(cè)成功if (i > 0) { System.out.println('注冊(cè)成功'); rs = true;}//將結(jié)果返回給客戶端,?⒔峁?菇ǔ?son數(shù)據(jù)返回?客?舳JSONObject rjson = new JSONObject();rjson.put('json', rs);response.getOutputStream().write(rjson.toString().getBytes('UTF-8'));// 向客戶端發(fā)送一個(gè)帶有json對(duì)象內(nèi)容的響應(yīng) }}

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

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

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

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

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包添加到類庫

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在實(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層一樣,文字就不敘述了,直接上圖

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

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

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

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

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

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

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

在實(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

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

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ū)動(dòng),只需要加載一次,所以放到靜態(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ā)送對(duì)象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ā)送對(duì)象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 連接對(duì)象 * @param ps 發(fā)送sql語句對(duì)象 * @param rs 返回值對(duì)象 */ public static void close(Connection ct, PreparedStatement ps, ResultSet rs) {if (rs != null) { try {rs.close(); } catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace(); }}if (ps != null) { try {ps.close(); } catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace(); }}if (ct != null) { try {ct.close(); } catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace(); }} } // 給外部一個(gè)訪問ct,和ps的方法 public static Connection getCt() {return ct; } public static PreparedStatement getPs() {return ps; }}

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

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

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

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

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

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

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

測(cè)試

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

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

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

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

查看ip地址的方法

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

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

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

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

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

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

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

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

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

總結(jié)

這篇關(guān)于微信demo的文章就到這里了,希望大家可以多多關(guān)注好吧啦網(wǎng)的更多精彩內(nèi)容!

標(biāo)簽: 微信
相關(guān)文章:
主站蜘蛛池模板: 亚洲人成人毛片无遮挡 | 成年男女免费视频 | 黄.www| 一级做a爰片久久毛片看看 一级做a爰片久久毛片鸭王 | 久草在线中文最新视频 | 一级一级一片免费高清 | 欧美午夜不卡在线观看最新 | 黄性色| 一级毛片在线观看视频 | 成人免费视频国产 | jizzjizz成熟丰满舒服 | 久久精品视屏 | 中文字幕综合 | 高清国产亚洲va精品 | 久久爱噜噜噜噜久久久网 | 奇米888四色在线精品 | 日韩黄色免费观看 | 日本一区午夜爱爱 | 欧美成人性色区 | 国产一区亚洲一区 | 神马午夜在线 | 美女一级毛片毛片在线播放 | 99国产精品一区二区 | 美日韩一区二区 | 久久国产精品久久国产精品 | 亚洲精品在线播放视频 | 孕妇孕交视频 | 欧美高清不卡 | 偷拍精品视频一区二区三区 | 草草免费观看视频在线 | 国产在线不卡午夜精品2021 | 久久久9999久久精品小说 | 99久久精品免费看国产一区二区三区 | 免费一级a毛片免费观看欧美大片 | 夜鲁夜鲁夜鲁在线观看福利 | 免费视频精品一区二区三区 | 婷婷色综合久久五月亚洲 | 久久频这里精品香蕉久久 | 99久久国产免费 - 99久久国产免费 | 欧美午夜精品久久久久久黑人 | 久久午夜鲁丝片午夜精品 |