日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:242日期: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)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
婷婷亚洲五月色综合| 国产精品亚洲人成在99www| 伊人久久国产| 久久久国产精品一区二区中文| 国产精品美女在线观看直播| 日韩久久99| 国产成人精品免费视| 日本不卡不码高清免费观看| 久久久久久黄| 婷婷中文字幕一区| 国产福利91精品一区二区| 国产欧美欧美| 国产精品美女久久久久久不卡| 日韩精品亚洲一区二区三区免费| 亚洲啊v在线| 奇米亚洲欧美| 国产精品视频一区视频二区| 欧美一区激情| 国产不卡精品| 亚洲天堂资源| 免费在线观看一区| 国产精品久久久亚洲一区| 日韩av自拍| 国产亚洲一区在线| 精品国产aⅴ| 日韩1区2区3区| 久久精品福利| 日韩欧美精品综合| 亚洲激情偷拍| 日本亚洲视频在线| 亚洲精品九九| 日本国产精品| 日本不卡视频一二三区| 日本综合精品一区| 国产探花一区| 亚洲精品乱码久久久久久蜜桃麻豆| 久久激情综合网| 老牛影视一区二区三区| 中文字幕日韩欧美精品高清在线| 久久中文字幕一区二区| 97成人在线| 夜夜嗨一区二区| 欧美一区二区三区久久| 亚洲欧洲av| 日韩国产一区| 日韩视频一区| 日韩毛片视频| 少妇精品久久久一区二区| 日韩精品dvd| 国产精品视频一区二区三区综合| 日韩在线观看一区二区| 日本久久综合| 欧美精品97| 久久www成人_看片免费不卡| 国产精品久一| 久久国产小视频| 欧美日韩高清| 91精品xxx在线观看| 日韩影片在线观看| 野花国产精品入口| 99久久夜色精品国产亚洲1000部| 亚洲最新av| 日韩三区免费| 国产精品一区二区精品视频观看 | 麻豆视频一区| 三级欧美韩日大片在线看| 国产精品美女久久久浪潮软件| 欧美天堂视频| 高清不卡亚洲| 国产精品亚洲综合色区韩国 | 国产成人77亚洲精品www| 亚洲一区有码| 男女性色大片免费观看一区二区 | 91精品亚洲| 人人草在线视频| 先锋影音久久久| 精品国产麻豆| 国产精品色在线网站| 狂野欧美性猛交xxxx| 中文字幕在线看片| 福利一区和二区| 激情久久久久久久| 99精品综合| 69堂免费精品视频在线播放| 欧美丰满日韩| 在线精品国产亚洲| 亚洲天堂1区| 欧美日韩亚洲一区在线观看| 欧美日韩精品免费观看视频完整| 激情国产在线| 久久中文视频| 亚洲v天堂v手机在线| 免费中文字幕日韩欧美| 国产精品一区二区精品视频观看| 亚洲一区二区三区免费在线观看| 免费的成人av| 麻豆理论在线观看| 欧美日韩va| 亚洲制服少妇| 四虎成人av| 老司机精品在线| 日韩影院在线观看| 国产激情一区| 天使萌一区二区三区免费观看| 欧美激情福利| 午夜视频一区二区在线观看| 日韩久久一区二区三区| 中文字幕一区二区av| 综合干狼人综合首页| 秋霞影院一区二区三区| 精品一级视频| 国产毛片久久久| 亚洲欧美网站在线观看| aa国产精品| 亚洲女同一区| 欧美日韩色图| 视频一区二区三区入口| 国产亚洲网站| 国产模特精品视频久久久久| 亚洲91精品| 快播电影网址老女人久久| 91亚洲人成网污www| 亚洲三级观看| 日韩区欧美区| 国产精选久久| 国产美女视频一区二区| 欧美日韩一区二区三区在线电影| 激情五月色综合国产精品| 美腿丝袜亚洲三区| 亚洲三区欧美一区国产二区| 99久久久久久中文字幕一区| 日韩国产一二三区| 免费欧美在线视频| 亚洲一级影院| 欧美freesex黑人又粗又大| 国产精品a级| 日韩成人在线看| 国产精品毛片一区二区三区| 国产精品外国| 国产精品嫩草99av在线| 亚洲精品少妇| 亚洲精品日韩久久| 久久国产精品免费一区二区三区| 日韩精品免费视频一区二区三区 | 不卡中文字幕| 啪啪国产精品| 欧美激情福利| 国产欧美大片| 高清一区二区三区av| 精品国产美女a久久9999| 日韩一区二区在线免费| 日韩成人综合| 国产精品社区| 亚洲中午字幕| 日韩一区二区三区四区五区| 亚洲毛片在线免费| 美女91精品| 国产日韩高清一区二区三区在线| 欧美综合社区国产| 电影91久久久| 麻豆理论在线观看| 久久裸体视频| 亚洲福利精品| 涩涩涩久久久成人精品| 日韩高清中文字幕一区| 久久影视三级福利片| 高清久久一区| 精品国产aⅴ| 国产精品88久久久久久| 日韩视频中文| 国产乱人伦精品一区| 久久免费福利| 亚洲精品网址| 中文字幕成人| 国产一区二区三区不卡视频网站 | 精品国产欧美日韩一区二区三区| 青草久久视频| 日韩黄色大片| 日韩一级欧洲| 国产高清亚洲| 日韩在线中文| 色综合视频一区二区三区日韩| 日韩在线黄色| 91视频一区| 激情六月综合| 亚洲精品综合| 精品捆绑调教一区二区三区| 激情久久婷婷| 日韩国产成人精品| 精品国产一区二区三区2021| 午夜久久99| 日韩高清电影免费| 久久视频精品| 日产欧产美韩系列久久99| 老司机精品视频在线播放| 色婷婷狠狠五月综合天色拍| 一区二区三区午夜视频| 美女精品久久| 久久国产免费| 亚洲精品裸体|