irpas技术客

android 仿微信demo————注册功能实现(服务端)_stormzhuo_仿微信

大大的周 7997

android 仿微信demo————微信启动界面实现

android 仿微信demo————注册功能实现(移动端)

android 仿微信demo————注册功能实现(服务端)

android 仿微信demo————登录功能实现(移动端)

android 仿微信demo————登录功能实现(服务端)

android 仿微信demo————微信主界面实现

android 仿微信demo————微信消息界面实现(移动端)

android 仿微信demo————微信消息界面实现(服务端)

android 仿微信demo————微信通讯录界面功能实现(移动端,服务端)

android 仿微信demo————微信发现界面实现

android 仿微信demo————微信顶部操作栏界面实现

android 仿微信demo————微信顶部操作栏搜索按钮实现(查询通讯录好友功能)

android 仿微信demo————微信顶部操作栏加号按钮实现(弹出子菜单)

上一篇文章实现了微信注册的移动端功能,下面继续完善功能,实现微信注册服务端功能

文章目录 服务端注册功能实现创建项目创建web层和客户端完成数据交互创建service层处理业务逻辑功能创建dao层操作数据库通过JDBC工具类访问数据库mysql中创建数据库和表测试

服务端注册功能实现

通过web层完成客户端和服务端的数据交互(接受数据,发送数据),service层完成业务逻辑(注册,登录),dao层操作数据库(要借助工具类)

创建项目

idea创建服务端项目

配置tomcat服务器

启动项目测试服务器

创建web层和客户端完成数据交互

创建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 { /* 设置中文字符编码,防止乱码*/ request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("UTF-8"); //以json数据完成操作 response.setContentType("application/json;charset=UTF-8"); System.out.println(request.getContentType());// 得到客户端发送过来内容的类型,application/json;charset=UTF-8 System.out.println(request.getRemoteAddr());// 得到客户端的ip地址, BufferedReader br = new BufferedReader(new InputStreamReader(// 使用字符流读取客户端发过来的数据 request.getInputStream())); String line = null; StringBuffer s = new StringBuffer();//StringBuffer String的区别,如果要对数据作频繁的修改,則用StringBuffer // 以一行的形式读取数据 while ((line = br.readLine()) != null) { s.append(line); } // 关闭io流 br.close(); System.out.println(s.toString()); //JSON:这是json解析包,idea是没有的,要我们自己导入 User user = JSON.parseObject(s.toString(), User.class);//是用了发射机制來完成对象的封闭 //以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); // 去数据库完成用户注册功能 UserService us = new UserServiceImpl(); //调用注册的方法 int i = us.reigisterUser(number, name, phone, password); boolean rs = false; //判断是否注册成功 if (i > 0) { System.out.println("注册成功"); rs = true; } //将结果返回给客户端 ,將结果构建成json数据返回給客戶端 JSONObject rjson = new JSONObject(); rjson.put("json", rs); response.getOutputStream().write( rjson.toString().getBytes("UTF-8"));// 向客户端发送一个带有json对象内容的响应 } }

上面代码用到用户实体类User和json(对数据进行封装),后面我们会介绍如何创建和使用,其他的就不阐述了,代码都有注释

在创建实体类之前,先创建一个包单独存放实体类,因为后面我们在完善功能的过程中会创建很多实体类,方便管理

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 + '\'' + '}'; } }

下载相关jar包(json) 下载地址 :https://pan.baidu.com/s/131P_eiT7-57X1CaMyehICg (提取码:zdou)

在WEB-INF目录下创建lib资源库,把下载好的JSON包复制到lib目录下,并把jar包添加到类库

创建service层处理业务逻辑功能

微信的除了注册业务逻辑处理功能,还有后面的要完善的登录,以及微信消息,通讯录,聊天信息等等,所以我们要用到一种编程思想,面向接口编程思想。创建一个接口,然后可以在里面添加我们需要业务处理的抽象方法(目前只有登录),之后在接口的实现类重写接口方法执行具体的操作即可

在上面创建Servlet Reigister.java文件中报红的地方按alt+enter键创建接口,并放到单独的包里

创建接口的实现类

在接口里写个注册的抽象方法

在实现类中重写接口方法

在实现类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; } } 创建dao层操作数据库

方法和创建service层一样,文字就不叙述了,直接上图

在实现类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如果操作成功,就是操作成功的条数 int i = JDBCUtil.executeUpdate(sql, number, name, phone, password, "1"); System.out.println("数据库的条数:"); return i; } } 通过JDBC工具类访问数据库

先创建包单独存放工具类,后再创建工具类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.加载驱动,只需要加载一次,所以放到静态代码块中 try { Class.forName(DRIVER); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 描述:封装一个方法可以获得连接,目的可以在其他地方之接调用 */ public static Connection getConnection() { try { ct = DriverManager.getConnection(URL, USER, PASSWORD); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ct; } /** * 描述:封装一个方法可以完成查询操作 * * @param sql 要查询的sql语句 * @param obj 占位符的具体内容 * @return ResultSet 将查询到的结果返回 */ public static ResultSet executeQuery(String sql, Object... obj) { // 1.得到连接 ct = getConnection(); // 2.创键发送对象 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; } /** * 描述:封装一个方法可以完成DDL,DML操作 * * @param sql 要操作的sql语句 * @param obj 占位符 * @return */ public static int executeUpdate(String sql, Object... obj) { // 1.得到连接 ct = getConnection(); // 2.创键发送对象 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; } /** * 描述:封装一个关闭资源的方法 * * @param ct 连接对象 * @param ps 发送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(); } } } // 给外部一个访问ct,和ps的方法 public static Connection getCt() { return ct; } public static PreparedStatement getPs() { return ps; } }

上面代码会用到mysql驱动包,下面给出使用方法

在上面下载的jar包中有mysql的驱动包,把它复制到lib下,然后添加到类库即可,方法和json包的添加一样

mysql中创建数据库和表

可以通过navicat可视化工具创建数据库和表(可以用自己的方法),下面给出我数据库结构

测试

在服务端JDBCUtil.java工具类修改数据库名和数据库密码为自己的

在客户端中把注册activity的请求服务器的方法里面的URL的ip地址修改成自己的ip地址

查看ip地址的方法 win+R,输入cmd进入命令行,然后输入ipconfig

启动服务端和客户端项目测试

此时mysql已成功写入数据


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #仿微信 #以往文章android