ssh练习项目-----自助图书管理系统

来源:互联网 发布:如何开展网络文化工作 编辑:程序博客网 时间:2024/04/28 19:50

上学期软件工程课的project做了个自助图书管理系统,那时还不会用ssh框架,这学期准备学框架,于是就开始一步步对这个项目用框架去改造。在这里记录一下改造过程。


原始的项目没有用ssh,代码主要分为以下几部分:

jsp文件作为前台的视图文件。

serlvetAction包:这里放得都是servlet类,这些servlet作为controller来进行数据的传递。servlet接受从jsp视图的数据,然后条用service包里的service类来处理数据。然后servlet把处理完的数据再传递到jsp页面。

service包:这包里放得都是service类。service类里包含了数据的处理方法。从servlet里调用这些方法。在service类中,调用DAO包的类来进行对数据库的操作。

DAO包:里面放的是数据库操作类,这些类直接对数据库操作和得到数据库数据。

model包:这包里放的是实体类,每个实体对应数据库的一张表。然后通常数据库取出来的数据都会直接放到model实体里被其他类使用。model的作用就是把一组数据集合起来统一管理与传递。

util包:放了一些工具类,如MD5加密类等。


一个学的是struct2。我主要用struct2来代替servlet来进行数据的传递。

用了struct2后,我把所有的的servlet类都取消了,并用Action类取代。在以前书的借、换、预订、用户登陆、退出等每一个操作都要用对应一个servlet来处理。所以需要很多很多servlet。而现在把一类setvlet都归并到一个Action里方法。如登陆servlet,退出servlet都转化为UserAction里的login(),logout()方法。然后再在方法里调用service类来处理数据。所以只要几个Action就能合并所有servlet类。

使用struct2的另外一个好处就往action传递参数时不用担心参数的类型转换问题。action会自动把参数转为对应的类型。


接着学的是hibernate,然后把所有DAO文件都改造了。

在hibernate中,数据库的实体更加对象化。对数据库的增删改,都可是直接通过对自定义实体的操作来映射到数据表中。例如能直接从数据表获取一个对象,或者直接对对象进行set操作,然后数据就可以同步到数据表中。

hibernate中更加注重实体之间的对应关系,像一对多,多对多等。这种对应关系能方便同时对两个实体操作或者是直接从一个实体获取另外一个实体的信息。像以前book和book_copy是没有关系的,在hibernate中可以设置book和book_copy为一对多的关系,然后就可以通过book_copy.getbook.getAuthor来直接从book_copy获取book的author属性。


最后使用spring整合struct2和hibernate。

spring的能通过IOC的依赖注入很好的管理业务对象,并能避免大量的Factory和singleton的使用。

将sping和hibernate整合,主要是用在sessionFactory上。通过让Dao类继承HibernateDaoSupport,然后通过spring的applicationContext.xm配置sessionFactory并向Dao类注入,这样sessionfactory的管理就从hibernate中交到spring中管理。hibernate不用再关注什么时候打开或关闭session,这些都交给了spring去管理。例如可以通过在web.xml中配置

<filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  </filter>
 <filter-mapping>
    <filter-name>hibernateFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping> 

来透过spring框架来设置一个过滤器,能够让session在请求解释完以后再关闭。所以能避免懒加载异常。


在Dao类中,对象增删改现在也可以通过spring的getHibernateTemplate()模板来操作。


接着是将spring和struct2整合。这时,action从由struct创建变为从spring的ioc中生成。生成过程中顺带有依赖关系的bean注入到action中。这些依赖关系能传递到service层和Dao层。


0 0