APP登陆注册 步骤二:服务端编程

1、创建数据库、表:

在这里插入图片描述在这里插入图片描述

2、项目结构:

在这里插入图片描述

3、数据库连接工具类 DBUtil :

public class DBUtil {
	// table,对应数据库的表
	public static final String TABLE_PASSWORD = "account";
	public static final String TABLE_USERINFO = "userinfo";
 
	// connect to MySql database
	public static Connection getConnect() {
		String url = "jdbc:mysql://localhost:3306/android"; // 数据库的Url,android代表数据库名
		Connection connecter = null;
		try {
			Class.forName("com.mysql.jdbc.Driver"); // java反射,固定写法
			//root 是数据库的账户名称,123456是账户密码,改为自己的
			connecter = (Connection) DriverManager.getConnection(url, "root", "123456");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("SQLException: " + e.getMessage());
			System.out.println("SQLState: " + e.getSQLState());
			System.out.println("VendorError: " + e.getErrorCode());
		}
		return connecter;
	}
}

4、处理注册的 Servlet :

@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public RegisterServlet() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
//		response.getWriter().append("Served at: ").append(request.getContextPath());
		
		String account = request.getParameter("account"); // 从 request 中获取名为 account 的参数的值
		String password = request.getParameter("password"); // 从 request 中获取名为 password 的参数的值
		System.out.println("account:" + account + "\npassword:" + password); // 打印出来看一看
 
		String resCode = "";
		String resMsg = "";
		String userId = "";
		
		
		/* 这里我们做一个最简单的注册逻辑,当然,你的实际业务可以相当复杂 */
		try {
			Connection connect = DBUtil.getConnect();
			Statement statement = (Statement) connect.createStatement(); // Statement可以理解为数据库操作实例,对数据库的所有操作都通过它来实现
			ResultSet result;
			
			String sqlQuery = "select * from " + DBUtil.TABLE_PASSWORD + " where userAccount='" + account + "'";
			
			// 查询类操作返回一个ResultSet集合,没有查到结果时ResultSet的长度为0
			result = statement.executeQuery(sqlQuery); // 先查询同样的账号(比如手机号)是否存在
			if(result.next()){ // 已存在
				resCode = "201";
				resMsg = "该账号已注册,请使用此账号直接登录或使用其他账号注册";
				userId = "";
			} else { // 不存在
				String sqlInsertPass = "insert into " + DBUtil.TABLE_PASSWORD + "(userAccount,userPassword) values('"+account+"','"+password+"')";
				// 更新类操作返回一个int类型的值,代表该操作影响到的行数
				int row1 = statement.executeUpdate(sqlInsertPass); // 插入帐号密码
				if(row1 == 1){
					String sqlQueryId = "select userId from " + DBUtil.TABLE_PASSWORD + " where userAccount='" + account + "'";
					ResultSet result2 = statement.executeQuery(sqlQueryId); // 查询新增记录的userId
					if(result2.next()){
						userId = result2.getInt("userId") + "";
					}
					int new_userId=Integer.valueOf(userId);
					String sqlInsertInfo = "insert into " + DBUtil.TABLE_USERINFO + "(userId) values('" + new_userId + "')";
					int row2 = statement.executeUpdate(sqlInsertInfo); // 在用户信息表中插入刚注册的Id
					if(row2 == 1){ // 两个表中都插入成功,从业务角度认定为注册成功
						resCode = "100";
						resMsg = "注册成功";
					}
				} else {
					resCode = "202";
					resMsg = "用户信息表插入错误";
					userId = "";
				}
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		HashMap<String, String> map = new HashMap<>();
		map.put("resCode", resCode);
		map.put("resMsg", resMsg);
		map.put("userId", userId);
		
		response.setContentType("text/html;charset=utf-8"); // 设置响应报文的编码格式
		PrintWriter pw = response.getWriter(); // 获取 response 的输出流
		pw.println(map.toString()); // 通过输出流把业务逻辑的结果输出
		pw.flush();

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

5、处理登陆的 Servlet :

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public LoginServlet() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String code = "";
		String message = "";
 
		String account = request.getParameter("account");
		String password = request.getParameter("password");
		log(account + ";" + password); 
	
		Connection connect = DBUtil.getConnect();
		try {
			Statement statement = (Statement) connect.createStatement();
			String sql = "select userId from " + DBUtil.TABLE_PASSWORD + " where userAccount='" + account
					+ "' and userPassword='" + password + "'";
			log(sql);
			ResultSet result = statement.executeQuery(sql);
			if (result.next()) { // 能查到该账号,说明已经注册过了
				code = "200";
				message = "登陆成功";
			} else {
 
				code = "100";
				message = "登录失败,密码不匹配或账号未注册";
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
 
		response.setContentType("text/html;charset=utf-8"); // 设置响应报文的编码格式,避免浏览器中输出乱码问题
		response.getWriter().append("code:").append(code).append(";message:").append(message);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

6、运行测试:

浏览器中输入要注册的账号、密码:
在这里插入图片描述
通过 Navicat 查看数据库表内容:
在这里插入图片描述
浏览器中输入要登录的账号、密码:
在这里插入图片描述

服务端环境搭建、编程到此结束,下面是客户端的编程,请看下篇文章~

♥ 喜 欢 请 点 赞 哟 ♥
(●ˇ∀ˇ●)

猜你喜欢

转载自blog.csdn.net/WU2629409421perfect/article/details/104625996