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————微信顶部操作栏搜索按钮实现(查询通讯录好友功能)

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

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

服务端登录功能实现

在以往文章里已经实现了服务端mvc框架,而登录和注册是类似,所以只需要在web层创建一个Servlet用于和客户端完成数据交互且在service层和dao层中在相应的接口添加相应的抽象方法,然后再实现类中重写就好了。

创建Servlet Login.java,实现服务端和客户端的数据交互
Login.java

package com.example.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.example.pojo.User;
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 = "Login", value = "/Login")
public class Login 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 password = URLDecoder.decode(user.getPassword(), "utf-8");
        System.out.println("微信号:" + number + ", 密码;" + password);
        System.out.println(user);
        // 去数据库完成用户登录功能
        UserServiceImpl us = new UserServiceImpl();
        //调用登录的方法
        User user1 = us.login(number, password);
        boolean loginInfo = false;
        if (user1 != null) {
            //登录成功
            loginInfo = true;
        }
        //将结果返回给客户端,将結果构建成json数据返回给客戶端
        JSONObject rjson = new JSONObject();
        rjson.put("json", loginInfo);
        response.getOutputStream().write(
                rjson.toString().getBytes("UTF-8"));// 向客户端发送一个带有json对象内容的响应
    }
}

在service层中的接口UserService.java添加处理登录业务逻辑处理的抽象方法

    //用户登录
    User login(String number,String password);

在这里插入图片描述

在service层中的类UserServiceImpl.java重写上面接口刚添加的方法

    @Override
    public User login(String number, String password) {
        //调用dao层完成数据查询操作
        User user = ud.findByUsername(number);
        if (user != null) {
            //比较密码
            if (password.equals(user.getPassword())) {
                //登录成功
                return user;
            }
        }
        return null;
    }

在dao层中的接口UserDao .java添加处理登录数据并操作数据库的的抽象方法

    //查询用户通过微信号
    User findByUsername(String number);

在dao层中的类UserDaoImpl.java重写上面接口刚添加的方法

    @Override
    public User findByUsername(String number) {
        //判断数据是用户名还是手机
        Pattern pattern = Pattern
                .compile("^(13[0-9]|15[0-9]|153|15[6-9]|180|18[23]|18[5-9])\\d{8}$");
        Matcher matcher = pattern.matcher(number);
        //手机sql执行语句
        if (matcher.matches()) {
            //sql
            String sql = "select * from user where phone=?";
            rs = JDBCUtil.executeQuery(sql, number);
        } else {  //用户名sql执行语句
            //sql
            String sql = "select * from user where number=?";
            rs = JDBCUtil.executeQuery(sql, number);
        }
        //判断是否查询到用户
        try {
            if (rs.next()) {
                //如果查询到用户,将用户封装到User对象中
                int id = rs.getInt("id");
                String number1 = rs.getString("number");
                String name = rs.getString("name");
                String password = rs.getString("password");
                String phone = rs.getString("phone");
                String remark = rs.getString("remark");
                //将查询到的用户封装到一个User对象中
                User user = new User();
                user.setId(id);
                user.setNumber(number1);
                user.setName(name);
                user.setPassword(password);
                user.setPhone(phone);
                user.setRemark(remark);
                System.out.println("查询到的用户" + user);
                return user;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

在这里插入图片描述

测试

启动项目测试
在这里插入图片描述

  • 32
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stormzhuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值