注册和登录功能的一些问题

表单赋值的问题

当请求request中携带了用户提交的数据时,需要将这些数据封装到JavaBean中,像之前写法需要一一赋值,倘若request携带了非常多的表单数据,此时的赋值操作就显得比较繁琐了,那有没有好的解决方法呢?这里可以使用apache的commons-beanutils搞定这个问题。

使用commons-beanutils解决表单赋值的问题。
首先需要下载两个jar包分别是:
commons-beanutils.jar:http://pan.baidu.com/s/1slzAndb
commons-logging.jar: http://pan.baidu.com/s/1eSNDiQA
下载完成后将其拷贝到项目的lib目录下。
修改RegistServlet中赋值操作如下:

    //获取用户提交的表单数据,并封装到User中
    User u = new User();
    //使用commons-beanutils将表单数据封装到User对象中
    try {
        //因为User对象中的brithday是Date类型,所以先注册一个日期转换器
        ConvertUtils.register(new DateLocaleConverter(), Date.class);
        //将表单数据封装到User对象中
        BeanUtils.populate(u, request.getParameterMap());
    } catch (IllegalAccessException e1) {
        e1.printStackTrace();
    } catch (InvocationTargetException e1) {
        e1.printStackTrace();
    }

修改LoginServlet中赋值操作如下:

    //获取用户提交的表单数据
    User user = new User();
    try {
        BeanUtils.populate(user, request.getParameterMap());
    } catch (IllegalAccessException e1) {
        // TODO Auto-generated catch block
    } catch (InvocationTargetException e1) {
        e1.printStackTrace();
    }

上面的BeanUtils.populate(user, request.getParameterMap())方法会遍历request.getParameterMap()的key,key与user中的属性一致的话,会将该属性赋值,所以要使用该方法的前提就是表单中的name值和JavaBean中的属性值名称要一致。

用户名不能重复的问题

在实际应用当中,用户名是不能重复的,即要保证用户名在数据库中的唯一性,要解决这个问题,需要在用户注册时先根据填写的用户名去数据库中查询,如果查询出结果的话,就说明该用户名已经被注册了。

主要代码如下,修改RegistServlet

        //使用apache commons-beanutil解决赋值操作
        try {
            //因为User中的birthday是Date类型,所以需要先注册一个日期转换器
            ConvertUtils.register(new DateLocaleConverter(), Date.class);
            //User类中的属性名需要跟jsp表单中的name保持一致
            BeanUtils.populate(u, request.getParameterMap());
        } catch (IllegalAccessException e1) {
            e1.printStackTrace();
        } catch (InvocationTargetException e1) {
            e1.printStackTrace();
        }

        //调用业务逻辑
        UserService us = new UserServiceImpl();
        try {
            //判断用户名是否重复
            User result = us.findUserByName(u);

            //如果不等于null则说明用户名重复
            if(result != null){
                request.setAttribute("msg", "用户名重复");
                request.getRequestDispatcher("/regist.jsp").forward(request, response);
            }else{
                //用户名不重复时,执行添加操作
                us.addUser(u);
                //分发转向
                response.getWriter().write("注册成功!1秒后跳转到主页");
                response.setHeader("refresh", "1;url=/login.jsp");
            }

        } catch (Exception e) {

            e.printStackTrace();
        }