我是靠谱客的博主 细腻宝贝,最近开发中收集的这篇文章主要介绍前后端结合注册功能,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这次是做的一个简单的前端和数据库结合实现的一个注册功能.

在这里插入图片描述
DAO类

package com.softeem.dao;

import com.softeem.entity.User;
import com.softeem.db.DBUtils;
import sun.security.util.Password;

import java.sql.Connection;
import java.util.List;

/**
 * @Author liqiuyang 2020/8/21 15:40
 */
public class RegDAO {
    private Connection conn;

    public RegDAO() {
    }

    public RegDAO(Connection conn) {
        this.conn = conn;
    }

    public boolean insert(User u){
        String sql = "insert into tbuser (name,password,age) values(?,?,?)";
        return DBUtils.exeUpdate(sql,u.getName(),u.getPassword(),u.getAge());
    }
    public User selectUser(String name,String password){
        String sql = "select * from tbuser where name=? and password=?";
        return DBUtils.queryOne(User.class,sql,name,password);
    }
    public List<User> selectlist(){
        return DBUtils.queryList(User.class,"select * from tbuser");
    }
    public boolean delete(int id){
        String sql = "delete from tbuser where id=?";
        return DBUtils.exeUpdate(sql,id);
    }
    public boolean update(User u){
        String sql = "update tbuser set password=? where id=?";
        return DBUtils.exeUpdate(conn,sql,u.getPassword(),u.getId());
    }


}

工具类

package com.softeem.db;

import com.alibaba.druid.pool.DruidDataSource;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.*;

/**
 * 数据库工具类v2.0 将访问数据的公共代码抽取: 1.加载驱动 2.连接获取 6.关闭资源
 * 
 * @author Magicbookpro
 *
 */
public class DBUtils {

	/** 驱动类路径 */
	private static String DRIVER_CLASS;
	/** url地址 */
	private static String URL;
	/** 数据库服务器登录用户名 */
	private static String USER;
	/** 数据库服务器登录密码 */
	private static String PASSWORD;
	
	/**最大活动链接数*/
	private static int MAX_ACTIVE;
	/**最长等待连接获取的时间*/
	private static long MAX_WAIT;
	/**初始链接数*/
	private static int INIT_SIZE;
	
	/**声明连接池的引用*/
	private static DruidDataSource ds;

	static {
		try {
			//读取属性文件后去连接数据库相关的字符串
			InputStream is = DBUtils.class.getResourceAsStream("/jdbc.properties");
			//创建属性对象
			Properties p = new Properties();
			//加载包含属性信息的输入流
			p.load(is);
			//根据属性名获取属性值
			DRIVER_CLASS = p.getProperty("driver");
			URL = p.getProperty("url");
			USER = p.getProperty("user");
			PASSWORD = p.getProperty("password");
			
			//获取连接池相关配置
			MAX_ACTIVE = Integer.parseInt(p.getProperty("pool.maxActive"));
			MAX_WAIT = Long.parseLong(p.getProperty("pool.maxWait"));
			INIT_SIZE = Integer.parseInt(p.getProperty("pool.initSize"));
			
			//初始化连接池
			init();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/** 
	 *  初始化连接池
	 */
	public static void init() {
		ds = new DruidDataSource();
		ds.setDriverClassName(DRIVER_CLASS);
		ds.setUrl(URL);
		ds.setUsername(USER);
		ds.setPassword(PASSWORD);
		ds.setMaxActive(MAX_ACTIVE);
		ds.setInitialSize(INIT_SIZE);
		ds.setMaxWait(MAX_WAIT);
	}
	
	/**
	 * 2.获取数据库连接对象
	 * 
	 * @return
	 */
	public static synchronized Connection getConn() {
		try {
			//当连接池被关闭或者为null重新初始化
			if(ds == null || ds.isClosed()) {
				init();
			}
			//从连接池中获取一个连接并返回
			return ds.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 关闭资源
	 * 
	 * @param rs
	 * @param stat
	 * @param conn
	 */
	public static void close(ResultSet rs, Statement stat, Connection conn) {
		try {
			if (rs != null)
				rs.close();
			if (stat != null)
				stat.close();
			if (conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	/**
	 * 封装通用的更新操作:INSERT UPDATE DELETE
	 * 
	 * @param sql
	 * @param params
	 * @return
	 */
	public static boolean exeUpdate(Connection conn,String sql, Object... params) {
		PreparedStatement ps = null;
		try {
			ps = conn.prepareStatement(sql);
			if (params != null) {
				for (int i = 0; i < params.length; i++) {
					ps.setObject(i + 1, params[i]);
				}
			}
			return ps.executeUpdate() > 0;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(null, ps, null);
		}
		return false;
	}

	/**
	 *
	 * @param sql
	 * @param params
	 * @return
	 */
	public static boolean exeUpdate(String sql, Object... params) {
		PreparedStatement ps = null;
		Connection conn = getConn();
		try {
			ps = conn.prepareStatement(sql);
			if (params != null) {
				for (int i = 0; i < params.length; i++) {
					ps.setObject(i + 1, params[i]);
				}
			}
			return ps.executeUpdate() > 0;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(null,ps,conn);
		}
		return false;
	}

	/**
	 * 封装通用查询单条数据的方法
	 * 
	 * @param <T>
	 * @param t
	 * @param sql
	 * @param params
	 * @return
	 */
	public static <T> T queryOne(Class<T> t, String sql, Object... params) {
		// 获取查询到的数据集合
		List<Map<String, Object>> list = queryMaps(sql, params);
		if (list.size() > 0) {
			// 获取一个Map对象
			Map<String, Object> map = list.get(0);
			// 将map集合转换为JavaBean并返回
			return mapToBean(map, t);
		}
		return null;
	}

	/**
	 * 封装通用查询多条数据的方法
	 * 
	 * @param <T>
	 * @param t
	 * @param sql
	 * @param params
	 * @return
	 */
	public static <T> List<T> queryList(Class<T> t, String sql, Object... params) {
		List<T> list = new ArrayList<>();
		// 获取所有查询到的数据
		List<Map<String, Object>> maps = queryMaps(sql, params);
		// 遍历集合中每一条数据(map)
		maps.forEach(m -> {
			// 将map转换为JavaBean
			T obj = mapToBean(m, t);
			// 将JavaBean装入list
			list.add(obj);
		});
		return list;
	}

	/**
	 * 将Map集合转换为一个确定的类型
	 * 
	 * @param <T>
	 * @param map
	 * @param t
	 * @return
	 */
	private static <T> T mapToBean(Map<String, Object> map, Class<T> t) {
		T obj = null;
		try {
			// 根据提供的类型创建对应类型的Object
			obj = t.newInstance();
			// 获取Class中的所有Field
			Field[] fields = t.getDeclaredFields();
			// 遍历获取每一个属性对象
			for (Field field : fields) {
				// 获取属性名
				String fname = field.getName();
				// 获取属性值
				Object value = map.get(fname);
				if (value != null) {
					// 设置属性对象的可访问性
					field.setAccessible(true);
					// 将从map中获取的值设置给属性
					field.set(obj, value);
				}
			}
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		return obj;
	}

	/**
	 * 执行相关查询之后并将结果返回为List<Map<String,Object>>集合
	 * 
	 * @param sql
	 * @param params
	 * @return
	 */
	public static List<Map<String, Object>> queryMaps(String sql, Object... params) {
		// 声明动态数据用于存储每一个查询到的Map对象
		List<Map<String, Object>> list = new ArrayList<>();
		// 获取连接
		Connection conn = getConn();
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			// 获取与预处理sql命令的对象
			ps = conn.prepareStatement(sql);
			if (params != null) {
				for (int i = 0; i < params.length; i++) {
					// 对指定位置的占位符填充值(预处理)
					ps.setObject(i + 1, params[i]);
				}
			}
			// 执行查询获取结果集
			rs = ps.executeQuery();
			// 获取结果集的元数据对象ResultSetMetaData
			ResultSetMetaData rsmd = rs.getMetaData();
			// 获取总查询列数
			int columCount = rsmd.getColumnCount();
			// 遍历结果集
			while (rs.next()) {
				// 声明Map集合存储每一条数据(临时缓存)
				Map<String, Object> map = new HashMap<String, Object>();
				// 遍历获取每一列的信息
				for (int i = 1; i <= columCount; i++) {
					// 获取列名称(作为Map集合的键)
					String key = rsmd.getColumnName(i);
					// 获取列标签(利用标签取值)
					String label = rsmd.getColumnLabel(i);
					// 获取列值(作为map集合的值)
					Object value = rs.getObject(label);
					if (value != null) {
						// 将获取到的每一列的列名与列值存储到map
						map.put(key, value);
					}
				}
				// 将map集合装入list
				list.add(map);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(rs, ps, conn);
		}
		return list;
	}
	
	/** 
	 *  根据提供的查询语句以及查询参数,返回符合条件的数目
	 * @param sql
	 * @param params
	 * @return
	 */
	public static int queryCount(String sql,Object...params) {
		Connection conn = getConn();
		PreparedStatement ps =null;
		ResultSet rs = null;
		try {
			ps = conn.prepareStatement(sql);
			if(params != null) {
				for (int i = 0; i < params.length; i++) {
					ps.setObject(i+1,params[i]);
				}
			}
			rs = ps.executeQuery();
			if(rs.next()) {
				return rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			close(rs,ps,conn);
		}
		return 0;
	}

}

实体类

package com.softeem.entity;

/**
 * @Author liqiuyang 2020/8/21 15:42
 */
public class User {
    private int id;
    private String name;
    private String password;
    private int age;

    public User() {

    }

    public User(int id, String name, String password, int age) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "java{" +
                ", name='" + name + ''' +
                ", password='" + password + ''' +
                ", age=" + age +
                '}';
    }


}

package com.softeem.servlets;

import com.softeem.dao.RegDAO;
import com.softeem.entity.User;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

@WebServlet("/reg")
public class RegisServlet extends HttpServlet {

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

    protected void doGet(HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws ServletException, IOException {
        Map<String,String[]> map = request.getParameterMap();
        User user = new User();
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

        RegDAO rd = new RegDAO();
        boolean r = rd.insert(user);
        //设置响应头中的内容类型,同时设置编码
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        if (r){
            out.println("<h1 style='color:#0f0'>注册成功!!!</h1>");
        }else{
            response.getWriter().write("false");
        }

    }
}

注册页面html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>注册页面</h1>
<form action="reg">
    username:<input type="text" name="name"><br>
    password:<input type="possword" name="password"><br>
    user age:<input type="text" name="age"><br>
    <button type="submit">注册</button>
</form>

</body>
</html>

配置文件

# jdbc connection
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///mydb3
user=root
password=123456

# connection pool settings
pool.maxActive=10
pool.initSize=5
pool.maxWait=30000

数据库
在这里插入图片描述

最后

以上就是细腻宝贝为你收集整理的前后端结合注册功能的全部内容,希望文章能够帮你解决前后端结合注册功能所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部