web开发之EStore网上购物平台

项目心得

在这个项目中我先使用的是三层架构,分别是dao层、service层、和web层。
然后使用的是hibernate的框架对dao层中数据进行增删改查。后期我会使用struts2框架和spring框架一起使用。

遇到的问题

1)没有搞清楚不同的模块之间的关联不能太紧密。
比如登陆和注册模块

  • ToLoginServlet的就只需要做跳转到login.jsp页面就可以了,不需要加入注册模块中保存Customer的代码,对于登陆的逻辑写在LoginServlet中就好了,注册的逻辑写在RegisterServlet中就好了。ToRegisterServlet中只需要写跳转到jsp的代码就可以了。
  • 这样做的好处就是,当后期我们查看自己写的代码时不会凌乱。这就有解耦的意思,尽量不要让登陆和注册的逻辑写在一个servlet中,这样会很凌乱,而且后期要改变一个功能的时候,就要改动很多地方,而且还会忘记自己写的那一部分代码在什么地方。也就是说,页面跳来跳去就会搞混淆。
    不同的功能写在不同的servlet中虽然servlet会很多但是会很清晰,容易查找,并且模块之间的关联性也小了。

2)登陆之后只是暂时保存了customer的数据,当我跳转到更新用户数据的时候,request中的customer就消失了。
解决方案将customer保存在session中

   HttpSession session=req.getSession();
   session.setAttribute("custmor",custmor);

3)更新用户数据的时候不能够更新成功。
后果就是插入了两个一样名字的数据

这是因为我没有将瞬时的用户数据转换为脱管状态。
custmor是new 出来的是瞬时态的。
cust是get()出来的是持久状态。
cust调用了set方法就变为了脱管状态。
脱管状态的数据更新才不会有两个同名的数据。

   public void updateInfo(Custmor custmor) throws ServiceException{
    Session session=HibernateSessionFactory.getSession();
    Transaction tran =session.beginTransaction();
    Custmor cust=custDao.findByName(custmor);
    if(cust!=null){
        cust.setAddress(custmor.getAddress());
        cust.setEmail(custmor.getEmail());
        cust.setPassword(custmor.getPassword());
        cust.setTelephone(custmor.getTelephone());
        cust.setZip(custmor.getZip());
        custDao.saveOrUpdate(cust);
    }else{
        throw new ServiceException("更新失败");
    }
    tran.commit();
    session.close();
}

4)更新数据的时候名字不可变,因为在数据库中查找的时候是按照名字来查询的,所以可以给name的input标签加一个属性readonly="true"只可以读不可更改。
5)如何在数据库中保存图片。。。。。。

你可能感兴趣的:(web开发之EStore网上购物平台)