+ doc/ (存放API文档) + report/ (存放JUnit测试结果) + src/ (存放java源程序) + web/ (web目录) + manage/ (存放blog管理页) + skin/ (存放blog界面页) + upload/ (存放用户上传的图片) + WEB-INF/ + classes/ (存放编译的class文件) + lib/ (存放用到的所有jar文件) + search/ (存放Lucene的index) + c.tld (使用jstl必须的文件) + dispatcher-servlet.xml (Spring配置文件) + web.xml (标准web配置文件) + blog.war (打包的可部署应用) + build.xml (ant脚本)
编写Ant?脚本 (目录) Ant是一个非常棒的执行批处理任务的工具。使用Ant能使编译、测试、打包、部署和生成文档等一系列任务全自动化,从而大大节省开发时间。 首先我们把用到的所有.jar文件放到/web/WEB-INF/lib中,然后编写compile任务,生成的class文件直接放到web/WEB-INF/classes目录下。如果编译成功,就进行单元测试,单元测试的结果以文本文件存放在report目录中。如果测试通过,下一步便是打包成blog.war文件。接着把应用部署到服务器上,直接将web目录的内容复制到%BEA_HOME%/user_projects/domains/blogdomain/applications/blog/目录下即可。如果要在Tomcat上部署,直接将整个web目录复制到%TOMCAT%/webapps/blog/下。 最后,如果需要,可以用javadoc生成api文档。
系统设计 (目录) Crystal Blog共分成三层结构:后台数据持久层,采用DAO模式;中间逻辑层,采用Facade模式;前端Web层,采用MVC结构,使用JSP作为视图。以下是Rational Rose的UML图:
设计Domain对象 (目录)
设计Domain对象 Domain层是抽象出的实体。根据我们要实现的功能,设计以下实体,它们都是普通的Java Bean: Account:封装一个用户,包括用户ID,用户名,口令,用户设置等等。 Category:封装一个分类,一共有3种Category,分别用来管理Article,Image和Link,一个Account对应多个Category。 Article:封装一篇文章,包括Title,Summary,Content等等,一个Category对应多个Article。 Feedback:封装一个回复,包括Title,Username,Url和Content,一个Article对应多个Feedback。 Image:封装一个图片,Image只包含图片信息(ImageId,Type),具体的图片是以用户上传到服务器的文件的形式存储的。一个Category对应多个Image。 Link:封装一个链接,和Category是多对一的关系。有Title,Url,Rss等属性。 Message:封装一个消息,使其他用户在不知道Email地址的情况下能够通过系统发送邮件给某个用户。
最后,为了唯一标识每条数据库记录,我们需要一个主键。在MS SQL Server和Oracle中可以使用自动递增的主键生成方式。但是很多数据库不支持自动递增的主键,考虑到移植性,我们自己定义一个Sequence表,用于生成递增的主键。Sequence表有且仅有7条记录,分别记录Account到Message对象的当前最大主键值。系统启动时,由SqlConfig负责初始化Sequence表。 SequenceDao负责提供下一个主键,为了提高效率,一次缓存10个主键。
配置iBatis (目录)
上一篇:minij2ee常见问题(FAQ)
下一篇:RMS高效编程指南
|