前端参考[PHP做后端实现微信小程序登录](https://blog.csdn.net/weixin_44735933/article/details/106453785)

LoginServlet

import com.starcpdk.entity.User;
import com.starcpdk.service.LoginService;
import com.starcpdk.service.impl.LoginServiceImpl;
import net.sf.json.JSONObject;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/login")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request , response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setCharacterEncoding("UTF-8");response.setContentType("text/html; charset=utf-8");String code = request.getParameter("code");String username = request.getParameter("username");String faceUrl = request.getParameter("face_url");String identify = request.getParameter("identify");String appid = "wx3d4200f27d153872";String secret = "33fafea3efad86cef0eb62b029ac3887";// 连接微信换userID接口String getOpenIdUrl = "https://api.weixin.qq.com/sns/jscode2session?appid="+ appid + "&secret=" + secret+ "&js_code=" + code + "&grant_type=authorization_code";HttpClient httpClient = new DefaultHttpClient();HttpGet httpGetOpenId = new HttpGet(getOpenIdUrl);ResponseHandler<String> responseHandler = new BasicResponseHandler();String token = null;try {token = httpClient.execute(httpGetOpenId, responseHandler);} catch (ClientProtocolException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}JSONObject jObject = JSONObject.fromObject(token);String userid = jObject.getString("openid");System.out.println("=======userid======++++++userid++++++===userid========"+userid);request.getSession().setAttribute("userid", userid);//取到userID,判断用户是否存在//若存在,查出用户,返回值按前端要求返回//若不存在,新建用户,写入名称及userIDLoginService loginService = new LoginServiceImpl();User user = loginService.selLogin(userid);JSONObject json = new JSONObject();PrintWriter out = response.getWriter();if (user != null) {request.getSession().setAttribute("userid", user.getUserId());request.getSession().setAttribute("name", user.getUserName());json.put("code", 1);json.put("msg", "用户已存在");json.put("user", user);out.print(json);out.close();} else {User user1 = new User();user1.setUserId(userid);user1.setUserName(username);user1.setFaceUrl(faceUrl);user1.setIdentify(identify);boolean count = loginService.insLogin(user1);if (count){request.getSession().setAttribute("userid", user.getUserId());request.getSession().setAttribute("name", user.getUserName());json.put("code", 0);json.put("user" , user1);json.put("msg" , "注册成功,并且登录");out.print(json);out.close();}else {json.put("code", 2);json.put("msg" , "注册失败");out.print(json);out.close();}}}
}

LoginService

package com.starcpdk.service;import com.starcpdk.entity.User;public interface LoginService {public User selLogin(String userid);public boolean insLogin(User user);
}

LoginServiceImpl


import com.starcpdk.dao.LoginDao;
import com.starcpdk.dao.impl.LoginDaoImpl;
import com.starcpdk.entity.User;
import com.starcpdk.service.LoginService;public class LoginServiceImpl implements LoginService {LoginDao loginDao = new LoginDaoImpl();@Overridepublic User selLogin(String userid) {User user = loginDao.selLogin(userid);return user;}@Overridepublic boolean insLogin(User user) {boolean count = loginDao.insLogin(user);return count;}
}

LoginDao


import com.starcpdk.entity.User;public interface LoginDao {public User selLogin(String userid);public boolean insLogin(User user);
}

LoginDaoImpl


import com.starcpdk.dao.LoginDao;
import com.starcpdk.entity.User;
import com.starcpdk.util.DBUtil;import java.sql.ResultSet;
import java.sql.SQLException;public class LoginDaoImpl implements LoginDao {@Overridepublic User selLogin(String userid) {String sql = "select * from user where userid = ?";Object[] params = new Object[]{userid};ResultSet rs = DBUtil.executeQuery(sql, params);User user = new User();System.out.println("上边的user值"+user);if (rs != null){try {while (rs.next()) {user.setId(rs.getInt("id"));user.setUserId(rs.getString("userid"));user.setUserName(rs.getString("username"));user.setPhone(rs.getString("phone"));user.setFaceUrl(rs.getString("face_url"));user.setIdentify(rs.getString("identify"));return user;}} catch (SQLException e) {e.printStackTrace();return null;}}return null;}@Overridepublic boolean insLogin(User user) {// TODO Auto-generated method stubString sql;Object[] params;System.out.println(user.getUserId()+user.getUserName());params = new Object[] {user.getUserId() , user.getUserName() , user.getPhone() , user.getFaceUrl() , user.getIdentify()};sql = "insert into user (userid , username , phone , face_url , identify) values(? , ? , ? , ? , ?) ";System.out.println(params);boolean result = DBUtil.excuteUpdate(sql, params);return result;}
}

连接池工具类


import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.io.InputStream;
import java.util.Properties;public class DataSourceUtil {//c3p0  硬编码的方式public static DataSource getDataSourceWithC3P0(){ComboPooledDataSource c3p0 = new ComboPooledDataSource();try {c3p0.setDriverClass("com.mysql.cj.jdbc.Driver");} catch (PropertyVetoException e) {e.printStackTrace();}c3p0.setJdbcUrl("jdbc:mysql://localhost:3306/pms?serverTimezone=UTC");c3p0.setUser("root");c3p0.setPassword("root");
//        c3p0.setPassword("123456");return c3p0 ;}//  c3p0  的xml方式获取dataSourcepublic static DataSource getDataSourceWithC3P0ByXml(){ComboPooledDataSource c3p0 = new ComboPooledDataSource("yyf");return c3p0 ;}//  获取dbcp方式的ds对象,方式一:BasicDataSourcepublic static DataSource getDataSourceWIthDBCP(){BasicDataSource dbcp = new BasicDataSource();dbcp.setDriverClassName("com.mysql.cj.jdbc.Driver");dbcp.setUrl("jdbc:mysql://localhost:3306/test1?serverTimezone=UTC");dbcp.setUsername("root");dbcp.setPassword("123456");dbcp.setInitialSize(20);dbcp.setMaxActive(10);return dbcp;}//  获取dbcp方式的ds对象,方式二:BasicDataSource,   Propertiespublic static DataSource getDataSourceWIthDBCPByProperties() throws Exception {DataSource dbcp = null;Properties props = new Properties();//   将    dbcpconfig.properties  文件加载到此类中//   将字符串  "dbcpconfig.properties"  转换为   输入流InputStream input = new DBCPDemo().getClass().getClassLoader().getResourceAsStream("dbcpconfig.properties");//load方法中参数没有直接为字符串的,需要一个流的形式props.load(input);//  BasicDataSourceFactory  的返回值为DataSource   从dbcpconfig.properties文件中取到数据://  driverClassName = com.mysql.cj.jdbc.Driver//url = jdbc:mysql://localhost:3306/test1?serverTimezone=UTC//username = root//password = 123456//initialSize = 20dbcp = BasicDataSourceFactory.createDataSource(props);return dbcp;}}

操作数据库类


import javax.sql.DataSource;
import java.sql.*;public class DBUtil {private static final String URL = "jdbc:mysql://39.102.36.78:3306/test1";private static final String USERNAME = "test1";private static final String PWD = "123456";public static Connection conn = null;public static Statement st = null;public static PreparedStatement ps = null;public static ResultSet rs = null;public static Connection getConnection() throws ClassNotFoundException, SQLException {Class.forName("com.mysql.jdbc.Driver");//return DriverManager.getConnection(URL,USERNAME,PWD);Connection con = null;DataSource ds= DataSourceUtil.getDataSourceWithC3P0();con = ds.getConnection();return con;}public static PreparedStatement createPreparedStatement(String sql, Object[] params) throws SQLException, ClassNotFoundException {ps = getConnection().prepareStatement(sql);if(params!=null) {for(int i=0;i<params.length;i++) {ps.setObject(i+1, params[i]);}}return ps;}public static void closeAll(ResultSet rs, Statement ps, Connection conn) {try {if(rs != null)rs.close();if(ps != null)ps.close();if(conn != null)conn.close();}catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//增删改public static boolean excuteUpdate(String sql, Object[] params) {try {ps = createPreparedStatement(sql, params);int count = ps.executeUpdate();if(count>0) {return true;}else {return false;}} catch (SQLException e) {e.printStackTrace();return false;}catch (Exception e) {e.printStackTrace();return false;}finally {closeAll(null, ps, conn);}}//查public static ResultSet executeQuery(String sql, Object[] params) {try {ps = createPreparedStatement(sql, params);rs = ps.executeQuery();return rs;} catch (SQLException e) {e.printStackTrace();return null;}catch (Exception e) {e.printStackTrace();return null;}}public static int getTotalCount(String sql) {int count = -1;try {ps = createPreparedStatement(sql, null);rs = ps.executeQuery();if(rs.next()) {count = rs.getInt(1);}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}catch (Exception e) {e.printStackTrace();}finally {closeAll(rs, ps, conn);}return count;}}

配置文件c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config><default-config><!-- 如果要研究某个xml中可以设置哪些属性。找相关类的 属性 或者setXxx()--><property name="user">root</property><property name="password">123456</property><property name="driverClass">com.mysql.cj.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/test1?serverTimezone=UTC</property><property name="checkoutTimeout">30000</property></default-config><named-config name="yyf"><property name="user">root</property><property name="password">123456</property><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/pms?serverTimezone=UTC</property><property name="checkoutTimeout">20000</property></named-config></c3p0-config>

配置文件数据库信息dbcpconfig.properties

driverClassName = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/test1?serverTimezone=UTC
username = root
password = 123456
initialSize = 20

不带框架的java后端实现微信小程序登录(三层)相关推荐

  1. 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...

    转载地址:(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 一.环境搭建 相关环境软件:JDK1 ...

  2. 史上最简单最全 java后端对接微信小程序客服教程

    文章参考--配置消息推送 小程序发版体验成员使用步骤 遇到的几个问题 先分享一下遇到的几个问题 提交消息推送服务起一直提示token校验失败 是因为没有启动项目 微信无法校验链接正确性 体验用户无法正 ...

  3. Java后端解密微信小程序手机号数据

    目录 一.敏感数据获取步骤 二.Java后端解密数据 1.实体类 2.解密工具类 3.涉及到jar包 4.测试类 一.敏感数据获取步骤 1.小程序端登录后,得到登录时获取的 code(仅可使用一次) ...

  4. SpringBoot实现微信小程序登录功能

    SpringBoot实现微信小程序登录 微信小程序登录流程 登录流程图 前端代码 后端代码 微信小程序登录流程 微信小程序官方文档:微信小程序官方文档 第一次学习微信小程序的登录,以前也好奇微信小程序 ...

  5. 【微信小程序】基于Java+uniapp框架开发的全开源微信小程序商城系统

    应用介绍 基于Java+uniapp框架开发的全开源微信小程序商城系统,前端采用目前主流的uniapp框架开发,后端采用Java语言开发,前后端代码全部开源,减少重复造轮子,支持小程序商城秒杀.优惠券 ...

  6. java后端微信小程序登录与注册

    java后端微信小程序登录与注册&微信登录授权 分析: 微信小程序用户表 的字段来源于微信服务器 , 必须想办法去获取到对应的用户信息 找到微信开放平台: 微信开放平台 以下是微信开放平台给出 ...

  7. java版微信小程序登录商城源码Spring Cloud+Redis+MQ+VR全景+b2b2c多商家入驻前后端分离商城源码

    @源码地址来源: https://minglisoft.cn/honghu2/business.html 微信小程序登录代码: /*** Copyright © 2012-2017 <a hre ...

  8. java版微信小程序登录商城源码Spring Cloud+Spring Boot+mybatis+security+uniapp+Redis+MQ+VR全景+b2b2c多商家入驻前后端分离商城源码

    @源码地址来源: https://minglisoft.cn/honghu2/business.html 微信小程序登录代码: /*** Copyright © 2012-2017 <a hre ...

  9. java版微信小程序登录商城源码MQ+VR全景+b2b2c多商家入驻前后端分离商城源码

    @源码地址来源: https://minglisoft.cn/honghu2/business.html 微信小程序登录代码: /*** Copyright © 2012-2017 <a hre ...

最新文章

  1. dom刷新局部元素_JavaScript中DOM和BOM基础
  2. 优化器是怎么得到执行计划的?
  3. 【Clion-Ubuntu-dlib】运行一个dlib案例(一)(如何在clion编译器中配置CMakeLists)
  4. 6 个对所有 Web 开发者都有用的 GitHub 仓库
  5. 【干货分享】企业数据中台整体介绍及建设方案(文末附52页pdf下载链接)
  6. 语文好的人是怎么做到的?
  7. java json 多余属性,fastjson支持JSON字符串解析到指定类型的JavaBean时的多余属性么?...
  8. 2021牛客寒假算法基础集训营6,签到题ACDFGIJ
  9. 规模数据导入高效方式︱将数据快速读入R—readr和readxl包
  10. IDEA连接GitHub
  11. 第一天:英语四级听力训练
  12. 学生请销假管理系统java_学生请假管理系统.doc
  13. windows 重启后电脑时间不准怎么办?
  14. C++探索之旅 | 第一部分第二课:C++编程的必要软件
  15. 【笔记】【WPF编程宝典】 第02章 XAML
  16. SDHK_Tool.Dynamic.SD_Motor_Angle 角度旋转电机
  17. VB.NET入门基础
  18. 永磁同步电机系统控制
  19. 机器人方向毕业设计论文撰写体会(2019年更新)
  20. Eclipse开发项目,“猥皮恩“连接,发布到现场

热门文章

  1. Win11开始菜单应用程序消失
  2. 【IP地址和MAC地址的区别】
  3. mac版本cornerstone的无限期破解方法
  4. Latex使用Biber引擎显示参考文献
  5. POJ 3579 二分答案
  6. 如何批量去掉Word文档中图片的超链接?
  7. L2-2 冰岛人 (25 分)
  8. 初始化一个全屏幕的窗口
  9. Codesys实现非线性函数关系的轴联动控制
  10. java机动武斗传隐藏_超级机器人大战j攻略 超级机器人大战j全隐藏要素