当用户点击提交 将数据提交到RegisterServlet
RegisterServlet 代码展示
public class RegisterServlet extends HttpServlet { private UsersService usersService=new UsersService(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //解决请求乱码 request.setCharacterEncoding("UTF-8"); //获取请求参数的map集合 Map<String, String[]> map=request.getParameterMap(); Users users=new Users(); //日期转换类 DateConverter converter=new DateConverter(); //设置转化规则 字符串-->转日期规则 converter.setPattern("yyyy-MM-dd"); //转化 ConvertUtils.register(converter, Date.class); //beanutils 的populate方法 将集合中map中key和user对象中属性一一对应,进行封装 try { BeanUtils.populate(users, map); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } //封装uid(36位字母数字组合 不重复) users.setUid(UUID.randomUUID().toString()); int row=usersService.register(users); if(row>0){ response.sendRedirect(request.getContextPath()+"/login.jsp"); }else{ response.sendRedirect(request.getContextPath()+"/register.jsp"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
上述代码中做了数据封装
是不是将数据一个个的通过请求对象获取很麻烦,就用到了beanutils 中的populate方法 传入一个集合和一个对象,将集合中的数据一一与对象中的属性对对应,从而封装到那个对象中
需要用户输入出生日期进行注册 那么用户输入的都是字符串格式,需要将数据按照一定的规则转成日期格式,converter类是一个日期转换类中有一个setPattern方法指定规则,ConvertUtils类中有一个静态register方法 传converter对象和日期类的字节码文件,从而进行转化
封装uid 在数据表中 uid字段不是自增字段也不是int字段 是个字符串类型,所以我们要给期封装不能重复的数据,用到了UUID类中有一个randomUUID方法获取一个数据再调用tosString方法转成字符串,就得到一个36位不重复的字母数字组合
然后再 service层
public class UsersService { private UsersDao usersDao=new UsersDao(); public int register(Users users){ int row=0; try { row=usersDao.register(users); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return row; } }
dao层
public class UsersDao { //注册 public int register(Users users) throws SQLException{ //获取链接对象 Connection conn=JDBCUtils.getConn(); //获取sql语句 String sql="insert into users(uid,username,password,name,email,birthday,sex) values(?,?,?,?,?,?,?)"; PreparedStatement pst=conn.prepareStatement(sql); //赋值 pst.setString(1, users.getUid()); pst.setString(2, users.getUsername()); pst.setString(3, users.getPassword()); pst.setString(4, users.getName()); pst.setString(5, users.getEmail()); pst.setDate(6, new Date(users.getBirthday().getTime())); pst.setString(7, users.getSex()); int row=pst.executeUpdate(); //释放资源 JDBCUtils.close(conn, pst); return row; } }
用到了JDBCUtils工具类,MySQL数据库的jar包 commons-beanutils jar包,commons-logging jar包