不带框架的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,判断用户是否存在
        //若存在,查出用户,返回值按前端要求返回
        //若不存在,新建用户,写入名称及userID
        LoginService 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();
    @Override
    public User selLogin(String userid) {
        User user = loginDao.selLogin(userid);
        return user;
    }

    @Override
    public 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 {
    @Override
    public 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;
    }

    @Override
    public boolean insLogin(User user) {
        // TODO Auto-generated method stub
        String 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方式获取dataSource
    public static DataSource getDataSourceWithC3P0ByXml(){
        ComboPooledDataSource c3p0 = new ComboPooledDataSource("yyf");
        return c3p0 ;
    }

    //  获取dbcp方式的ds对象,方式一:BasicDataSource
    public 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,   Properties
    public 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 = 20
        dbcp = 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 block
			e.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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值