谈谈网站注册功能的数据封装(jsp+servlet)

首先说一下注册功能的实现思路,注册账户的意思是什么呢,比如你访问了京东网,来到注册页面,你会填写一些基本信息,后台代码读取这些信息,最后写入数据库,并返回给你一个注册成功或者失败的结果,对于网站开发来说,注册功能的实现其实算是比较基础的内容,因为它并不涉及复杂的业务逻辑,但是,实现注册功能的过程中,有一些我觉得好的点,比如说对于数据的封装,是值得去注意的地方。(文章最后给出核心代码)

比如像下面这个页面

 这时候你会发现其实提交的数据会比较多,如果都用request.getParamter(String name),去一个一个获取就会比较麻烦,所以自然而然就会想到将这些数据封装到一个user对象当中去,然后直接把user对象传到业务层与dao层,这样就会方便很多。实现起来,就是将数据通过键值对的方法封装到一个Map当中,然后通过BeanUtils的populate方法封装到user对象当中(下面三行代码解决),其实实现不难,但是这种将数据封装起来的思想是比较值得学习的地方,在以后实现商品添加功能还有分页处理上都有运用,不仅简化开发,而且比较符合面向对象编程特点。

                 Map<String,String[]> properties=request.getParameterMap();
                 User user=new User();
                BeanUtils.populate(user, properties);

注意,这里的Map第二个参数为String数组,还有个需要注意的点是id的封装,有些数据没有通过页面传过来,这时候需要手动封装,而且对于id来说,必须要是不重复的,这是需要用到一个工具UUID.这里你可以直接这样写

         user.setUid(UUID.randomUUID().toString());

但其实也许别的地方也会用到这个工具,比如说随机激活码,这时候就可以将这其做成一个工具类,提供一个静态的公共接口,例如


import java.util.UUID;

public class CommonUtils {
    public static String getUUid(){
        return UUID.randomUUID().toString();
    }
}

相应上面的语句改成    user.setUid(CommonUtils.getUUid());

那如果说,我要设置激活码,也可以直接用该工具类  user.setCode(CommonUtils.getUUid());这其实也是一种向上抽取的一个过程,虽然说注册本身不难,但其实这种对于数据的抽取跟封装还是比较好的一种编码风格,值得去多加思考。

 

对于注册功能来说,最重要的就是将这些数据封装好,传入到其他层。

Servlet部分的代码:

  1. package com.ccdx.web;
  2. import java.io.IOException;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.sql.SQLException;
  5. import java.util.Map;
  6. import java.util.Set;
  7. import java.util.UUID;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import org.apache.commons.beanutils.BeanUtils;
  13. import com.ccdx.domain.User;
  14. import com.ccdx.service.UserService;
  15. import com.ccdx.utils.CommonUtils;
  16. /**
  17.  * Servlet implementation class RegisterSelvert
  18.  */
  19. public class RegisterSelvert extends HttpServlet {
  20.     
  21.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  22.         UserService service=new UserService();
  23.         request.setCharacterEncoding("UTF-8");
  24.          Map<String,String[]> properties=request.getParameterMap();
  25.          User user=new User();
  26.           
  27.             try {
  28.                 BeanUtils.populate(user, properties);
  29.             } catch (IllegalAccessException e) {
  30.                 // TODO Auto-generated catch block
  31.                 e.printStackTrace();
  32.             } catch (InvocationTargetException e) {
  33.                 // TODO Auto-generated catch block
  34.                 e.printStackTrace();
  35.             }
  36.             System.out.println(user.getBirthday());
  37.             user.setUid(CommonUtils.getUUid());
  38.             user.setTelephone(null);
  39.             user.setState(0);
  40.             user.setCode(CommonUtils.getUUid());
  41.             boolean isRegisterSuccess=false;
  42.          try {
  43.              isRegisterSuccess=service.insert(user);
  44.         } catch (SQLException e) {
  45.             // TODO Auto-generated catch block
  46.             e.printStackTrace();
  47.         }
  48.          if(isRegisterSuccess){
  49.              response.sendRedirect(request.getContextPath()+"/login.jsp");
  50.          }else{
  51.              response.sendRedirect(request.getContextPath()+"/registerFail.jsp");
  52.          }
  53.     }
  54.  
  55.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  56.         
  57.         doGet(request, response);
  58.     }
  59. }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值