不带框架的java后端实现微信小程序登录(三层)
前端参考[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后端实现微信小程序登录(三层)相关推荐
- 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...
转载地址:(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 一.环境搭建 相关环境软件:JDK1 ...
- 史上最简单最全 java后端对接微信小程序客服教程
文章参考--配置消息推送 小程序发版体验成员使用步骤 遇到的几个问题 先分享一下遇到的几个问题 提交消息推送服务起一直提示token校验失败 是因为没有启动项目 微信无法校验链接正确性 体验用户无法正 ...
- Java后端解密微信小程序手机号数据
目录 一.敏感数据获取步骤 二.Java后端解密数据 1.实体类 2.解密工具类 3.涉及到jar包 4.测试类 一.敏感数据获取步骤 1.小程序端登录后,得到登录时获取的 code(仅可使用一次) ...
- SpringBoot实现微信小程序登录功能
SpringBoot实现微信小程序登录 微信小程序登录流程 登录流程图 前端代码 后端代码 微信小程序登录流程 微信小程序官方文档:微信小程序官方文档 第一次学习微信小程序的登录,以前也好奇微信小程序 ...
- 【微信小程序】基于Java+uniapp框架开发的全开源微信小程序商城系统
应用介绍 基于Java+uniapp框架开发的全开源微信小程序商城系统,前端采用目前主流的uniapp框架开发,后端采用Java语言开发,前后端代码全部开源,减少重复造轮子,支持小程序商城秒杀.优惠券 ...
- java后端微信小程序登录与注册
java后端微信小程序登录与注册&微信登录授权 分析: 微信小程序用户表 的字段来源于微信服务器 , 必须想办法去获取到对应的用户信息 找到微信开放平台: 微信开放平台 以下是微信开放平台给出 ...
- java版微信小程序登录商城源码Spring Cloud+Redis+MQ+VR全景+b2b2c多商家入驻前后端分离商城源码
@源码地址来源: https://minglisoft.cn/honghu2/business.html 微信小程序登录代码: /*** Copyright © 2012-2017 <a hre ...
- java版微信小程序登录商城源码Spring Cloud+Spring Boot+mybatis+security+uniapp+Redis+MQ+VR全景+b2b2c多商家入驻前后端分离商城源码
@源码地址来源: https://minglisoft.cn/honghu2/business.html 微信小程序登录代码: /*** Copyright © 2012-2017 <a hre ...
- java版微信小程序登录商城源码MQ+VR全景+b2b2c多商家入驻前后端分离商城源码
@源码地址来源: https://minglisoft.cn/honghu2/business.html 微信小程序登录代码: /*** Copyright © 2012-2017 <a hre ...
最新文章
- dom刷新局部元素_JavaScript中DOM和BOM基础
- 优化器是怎么得到执行计划的?
- 【Clion-Ubuntu-dlib】运行一个dlib案例(一)(如何在clion编译器中配置CMakeLists)
- 6 个对所有 Web 开发者都有用的 GitHub 仓库
- 【干货分享】企业数据中台整体介绍及建设方案(文末附52页pdf下载链接)
- 语文好的人是怎么做到的?
- java json 多余属性,fastjson支持JSON字符串解析到指定类型的JavaBean时的多余属性么?...
- 2021牛客寒假算法基础集训营6,签到题ACDFGIJ
- 规模数据导入高效方式︱将数据快速读入R—readr和readxl包
- IDEA连接GitHub
- 第一天:英语四级听力训练
- 学生请销假管理系统java_学生请假管理系统.doc
- windows 重启后电脑时间不准怎么办?
- C++探索之旅 | 第一部分第二课:C++编程的必要软件
- 【笔记】【WPF编程宝典】 第02章 XAML
- SDHK_Tool.Dynamic.SD_Motor_Angle 角度旋转电机
- VB.NET入门基础
- 永磁同步电机系统控制
- 机器人方向毕业设计论文撰写体会(2019年更新)
- Eclipse开发项目,“猥皮恩“连接,发布到现场