网上书店项目的架构和设计.ppt_第1页
网上书店项目的架构和设计.ppt_第2页
网上书店项目的架构和设计.ppt_第3页
网上书店项目的架构和设计.ppt_第4页
网上书店项目的架构和设计.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 网上书店项目的架构和设计,网上书店的架构,搭建项目框架,注册、登录和注销功能开发,4.1 网上书店的架构,4.1.1 功能需求和展示 1主界面 网上书店购书界面如图4.1所示。,4.1.1 功能需求和展示,2功能模块 网上书店是一个典型的基于Web网站的Java EE软件系统,集成了诸多的功能模块,主要包括: (1)显示图书分类。 (2)用户可以根据分类浏览某一类图书列表。 (3)用户可以查看具体某一本书的简介。 (4)在图书浏览页只要单击【购买】按钮,就可把选定的图书加入购物车中。 (5)用户可以随时单击 ,查看车中已购图书的信息。 (6)已登录的用户可以单击【结账】按钮下订单。 (

2、7)使用需先注册,在注册页填写个人信息,确认有效后成为新用户。 (8)用户在登录页填写用户名和密码,确认正确后才可结账。,4.1.1 功能需求和展示,架构设计的基本宗旨是尽量做到各模块的独立性(理想情况:一个功能对应一个JavaEE组件),功能实现与界面开发相分离,互不干扰。,各功能模块的划分如图4.2所示。,4.1.2 业务层的引入:多框架整合(含Service层),为了达到上述的功能需求并实践这个设计宗旨,在第三章SSH2多框架配合的基础上还必须引入一个业务层(Service层)。 那么,业务层有什么作用呢? 通过之前的实践,我们知道,DAO接口能将操作数据库的动作细节与前端代码相隔离,但

3、是DAO所封装的仅仅是最基本的数据库操作,而实际应用中Web网站的每一项功能往往都是以业务(Service)的形式提供给用户的,业务就是一组(包括增、删、改、查在内的)操作数据库的动作序列,对系统某个应用功能的优化和增强,通常要对该功能对应业务中动作的种类、数目和调用次序进行改变和重组。,4.1.2 业务层的引入:多框架整合(含Service层),例如,登录功能的实现原来只要调用DAO接口的validateUser( )方法就行,现在情况发生了变化,考虑到有新加入的用户起初连帐号也没有,需要先注册再登录,为了方便操作,增强的登录功能要求先后调用DAO接口的saveUser()(用于注册)和va

4、lidateUser()两个方法。通行的做法是将这两个动作( saveUser()和validateUser() )进一步封装为一个服务(Service),前端代码直接使用这个Service,无须关心为实现它而对DAO接口中的基本方法是如何组织调用的。 这些Service构成了业务层,从编码的视角来看,这层是最容易忽视的。往往在用户界面层或持久层周围能看到这些业务处理的代码,这其实是不正确的。因为它会造成程序代码的高耦合,随着时间的推移,这些代码将很难维护。 通过一个程序示例来加深理解。,4.1.2 业务层的引入:多框架整合(含Service层),实践任务: 在三个框架全整合的基础上,开发一个

5、业务层,给Web登录而程序增加一个服务(注册+登录)的功能。建立项目: jsp_struts2_spring_service_dao_hibernate。 1添加Spring核心容器 2添加Hibernate并持久化user表 3添加Struts 2框架 4Struts 2与Spring集成 添加Spring支持包。 配置web.xml文件。 打开web.xml文件,增加Spring的配置,代码所示。 创建perties。 在src目录下创建perties文件,把Struts 2的类的生成交给Spring完成: struts.objectFactory=

6、spring;,4.1.2 业务层的引入:多框架整合(含Service层),5开发DAO层 BaseDAO代码如下: package org.easybooks.bookstore.dao; import org.hibernate.SessionFactory; import org.hibernate.Session; public class BaseDAO private SessionFactory sessionFactory; public SessionFactory getSessionFactory() return sessionFactory; public void

7、setSessionFactory(SessionFactory sessionFactory) this.sessionFactory=sessionFactory; public Session getSession() Session session=sessionFactory.openSession(); return session; ,4.1.2 业务层的引入:多框架整合(含Service层),IUserDAO接口代码如下: package org.easybooks.bookstore.dao; import org.easybooks.bookstore.vo.User; p

8、ublic interface IUserDAO public User validateUser(String username,String password); public void saveUser(User user); UserDAO类代码所示。,4.1.2 业务层的引入:多框架整合(含Service层),6开发业务层 在src目录下建立包org.easybooks.bookstore.service,包中安置一个IUserService接口。 IUserService接口代码如下: package org.easybooks.bookstore.service; import

9、org.easybooks.bookstore.vo.User; public interface IUserService public User validateUser(String username,String password); public User registerUser(User user);/实现(注册登录)的Service UserService类代码所示。,4.1.2 业务层的引入:多框架整合(含Service层),7开发Action控制块 LoginAction.java代码所示。 struts.xml文件内容如下: /error.jsp /welcome.jsp

10、 /error.jsp /welcome.jsp ,4.1.2 业务层的引入:多框架整合(含Service层),8注册组件 applicationContext.xml文件代码所示。 9编写JSP文件 login.jsp的代码如下: 登录页面 用户登录 姓名: 密码: 注册 ,4.1.2 业务层的引入:多框架整合(含Service层),register.jsp的代码如下: 注册页面 用户注册 用户名: 密码: ,4.1.2 业务层的引入:多框架整合(含Service层),welcome.jsp的代码如下: 成功页面 ,您好!欢迎光临叮当书店。 error.jsp的代码如下: 失败页面 登录失败

11、! ,4.1.2 业务层的引入:多框架整合(含Service层),10部署运行 部署项目、启动Tomcat服务器。在浏览器中输入http:/localhost:8080/jsp_struts2_ spring_service_dao_hibernate/并回车,出现如图4.3所示的登录首页。,4.1.2 业务层的引入:多框架整合(含Service层),单击【登录】按钮提交表单,跳转到如图4.4所示的成功页面。,4.1.2 业务层的引入:多框架整合(含Service层),后退到登录首页,如图4.5所示,用鼠标单击页面上的“注册”链接,进入如图4.6所示的注册页面。,4.1.2 业务层的引入:多框

12、架整合(含Service层),此时控制器会调用IUserService接口里的“注册登录”服务(registerUser()方法),该服务又先后调用DAO层的saveUser()方法和validateUser()方法,实现新用户注册后立即用新账号登录的功能,本例将跳转到如图4.7所示的页面。,4.1.3 系统架构:原理与实施,1分层模型 总结前述的知识,轻量级的Java EE系统最适合采用分层的方式架构,下面给出其分层模型,如图4.8所示。,4.1.3 系统架构:原理与实施,2实施方案 这里将讨论一个使用3种开源框架的解决方案,如图4.9所示。,4.2 搭建项目框架,1创建Web项目 在MyE

13、clipse中创建一个新的Web Project,命名为bookstore。 2创建源代码包 在项目src目录下创建如图4.10所示的包。,4.2 搭建项目框架,3创建数据库 网上书店有以下5个实体:用户、图书分类、图书、订单、订单项,因此,本系统的数据库设计如图4.11所示。,4.2 搭建项目框架,根据图4.11所示的设计模型,用CASE工具生成SQL语句,代码所示。 最终生成的表如图4.12所示,每个实体对应一个表,总共5个表。,4.2 搭建项目框架,向catalog表输入记录的SQL语句: INSERT INTO catalog VALUES(1, C语言程序设计); INSERT IN

14、TO catalog VALUES(2, Java开发); INSERT INTO catalog VALUES(3, 数据库); INSERT INTO catalog VALUES(4, 网页编程);,4.2 搭建项目框架,向book表输入记录: INSERT INTO book VALUES(1, 4, ASP.NET 3.5实用教程, 38, ASP.NET3.5.jpg); INSERT INTO book VALUES(2, 1, C#实用教程, 43, CSharp.jpg); INSERT INTO book VALUES(3, 1, C实用教程, 36, C.jpg); IN

15、SERT INTO book VALUES(4, 1, C+实用教程, 40, C+.jpg); INSERT INTO book VALUES(5, 4, Flex 4开发实践, 45, Flex4.jpg); INSERT INTO book VALUES(6, 2, Java EE基础实用教程, 35, JavaEEBasic.jpg); INSERT INTO book VALUES(7, 2, Java EE实用教程, 39, JavaEE.jpg); INSERT INTO book VALUES(8, 2, Java实用教程(第2版), 50, Java.jpg); INSERT

16、 INTO book VALUES(9, 4, JSP编程教程, 30, JSP.jpg); INSERT INTO book VALUES(10, 3, MySQL实用教程, 37, MySQL.jpg); INSERT INTO book VALUES(11, 3, Oracle实用教程(第3版), 29, Oracle.jpg); INSERT INTO book VALUES(12, 4, PHP实用教程, 35, PHP.jpg); INSERT INTO book VALUES(13, 3, SQL Server实用教程(第3版), 25, SQL Server.jpg); INS

17、ERT INTO book VALUES(14, 1, Visual C+教程(第2版), 25, VC+.jpg);,4.2 搭建项目框架,4添加SSH2多框架 要注意添加的次序: (1)添加Spring核心容器。 (2)添加Hibernate框架。 (3)添加Struts 2框架。 (4)Struts 2与Spring集成。 具体操作同4.1.2小节,在第(2)步添加了Hibernate后,要一并将bookstore中的5个表全都用“反向工程”法生成持久化对象及映射文件,生成项全部置于先前创建的org.easybooks.bookstore.vo包中,如图4.13所示。,4.3 注册、登录

18、和注销功能开发,4.3.1 表示层页面设计 1页面布局 在WebRoot下建立文件夹css,在其中创建bookstore.css文件。 编写CSS代码所示。,4.3.1 表示层页面设计,2知识点:CSS样式表 例如,在CSS定义了a标签的样式如下: a font-family: 宋体; color: #000000; 那么在页面中若出现: 链接 而类样式则不同,定义一个样式的类格式如下: .name 该类样式的属性 在页面标签中加入“class=name”属性,该标签就可以使用CSS中.name定义的样式。例如: ,4.3.1 表示层页面设计,3设计主界面 主页面的框架由index.jsp实现

19、,代码所示。 4分块子页面设计 (1)网页头设计。 首先在主界面的上方是网页头(对应head.jsp),代码所示。 (2)登录页设计。 登录页对应login.jsp,代码所示。 (3)注册页设计。 注册页对应register.jsp,代码所示。 (4)网页尾设计。 foot.jsp为整个页面的尾部,其代码非常简单,一般是版权说明等内容,代码所示。,4.3.1 表示层页面设计,5效果展示 (1)主界面。 在浏览器地址栏输入http:/localhost:8080/bookstore/index.jsp并回车,显示主界面如图4.14所示。,4.3.1 表示层页面设计,(2)登录页。 单击“登录”链

20、接,如图4.15所示,进入登录页。,4.3.1 表示层页面设计,(3)注册页。 单击“注册”链接,进入注册页,页面上出现如图4.16所示的供用户填写个人信息的表单。,4.3.2 持久层接口设计,DAO层所涉及的类、接口如图4.17所示。,4.3.2 持久层接口设计,在org.easybooks.bookstore.dao包中创建IUserDAO.java,代码如下: package org.easybooks.bookstore.dao; import org.easybooks.bookstore.vo.User; public interface IUserDAO /用户注册时,保存注册信

21、息 public void saveUser(User user); /用户登录时,验证用户信息 public User validateUser(String username,String password); ,4.3.2 持久层接口设计,创建BaseDAO.java,代码如下: package org.easybooks.bookstore.dao; import org.hibernate.SessionFactory; import org.hibernate.Session; public class BaseDAO private SessionFactory sessionF

22、actory; public SessionFactory getSessionFactory() return sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) this.sessionFactory=sessionFactory; public Session getSession() Session session=sessionFactory.openSession(); return session; 在org.easybooks.bookstore.dao.impl包中创建Use

23、rDAO.java,代码所示。,4.3.3 业务及控制逻辑设计,1业务层开发 业务层(Service层)用于处理各种业务逻辑,主要的类和接口是IUserService、UserService,如图4.18所示。,4.3.3 业务及控制逻辑设计,在org.easybooks.bookstore.service包中创建IUserService. java,代码如下: package org.easybooks.bookstore.service; import org.easybooks.bookstore.vo.User; public interface IUserService /保存注册信

24、息 public void saveUser(User user); /验证用户信息 public User validateUser(String username,String password); ,4.3.3 业务及控制逻辑设计,在org.easybooks.bookstore.service.impl包中创建UserService.java,代码如下: package org.easybooks.bookstore.service.impl; import org.easybooks.bookstore.dao.IUserDAO; import org.easybooks.books

25、tore.service.IUserService; import org.easybooks.bookstore.vo.User; public class UserService implements IUserService private IUserDAO userDAO; /保存注册信息 public void saveUser(User user) this.userDAO.saveUser(user); /验证用户信息 public User validateUser(String username,String password) return userDAO.validateUser(username, password); public IUserDAO getUserDAO() return userDAO; public void setUserDAO(IUserDAO userDAO) this.userDAO=userDAO; ,4.3.3 业务及控制逻辑设计,2控制模块开发 系统的注册、登录和注销功能的控制模块由Use

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论