网上书店项目的架构和设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 setSessionFactory(SessionFactory sessionFactory){ this.sessionFactory=sessionFactory; } public Session getSession(){ Session session=sessionFactory.openSession(); return session; } }
1.分层模型 总结前述的知识,轻量级的Java EE系统最适合采用分层的方式架构,下面 给出其分层模型,如图4.8所示。
2.实施方案 这里将讨论一个使用3种开源框架的解决方案,如图4.9所示。
1.创建Web项目 在MyEclipse中创建一个新的Web Project,命名为bookstore。 2.创建源代码包 在项目src目录下创建如图4.10所示的包。
7.开发Action控制块 LoginAction.java代码所示。 struts.xml文件内容如下:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"> <struts> <package name="struts" extends="struts-default"> <action name="login" class="login"> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> </action> <action name="register" class="login" method="register"> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> </action> </package> </struts>
( saveUser()和validateUser() )进一步封装为一个服务(Service),前端 代码直接使用这个Service,无须关心为实现它而对DAO接口中的基本方法是如 何组织调用的。 这些Service构成了业务层,从编码的视角来看,这层是最容易忽视的。往 往在用户界面层或持久层周围能看到这些业务处理的代码,这其实是不正确的。 因为它会造成程序代码的高耦合,随着时间的推移,这些代码将很难维护。 通过一个程序示例来加深理解。
6.开发业务层 在src目录下建立包org.easybooks.bookstore.service,包中安置一个 IUserService接口。 IUserService接口代码如下: package org.easybooks.bookstore.service; import er; public interface IUserService { public User validateUser(String username,String password); public User registerUser(User user); //实现(注册+登录)的Service } UserService类代码所示。
单击【登录】按钮提交表单,跳转到如图4.4所示的成功页面。
后退到登录首页,如图4.5所示,用鼠标单击页面上的“注册”链接,进 入如图4.6所示的注册页面。
此时控制器会调用IUserService接口里的“注册+登录”服务(registerUser() 方法),该服务又先后调用DAO层的saveUser()方法和validateUser()方法,实现新 用户注册后立即用新账号登录的功能,本例将跳转到如图4.7所示的页面。
8.注册组件 applicationContext.xml文件代码所示。 9.编写JSP文件 login.jsp的代码如下:
<%@ page language="java" pageEncoding="utf-8"%> <html> <head><title>登录页面</title></head> <body> <form action="login.action" method="post"> 用户登录<br> 姓名:<input type="text" name="ername"/><br> 密码:<input type="password" name="user.password"/><br> <input type="submit" value="登录"/> <a href="register.jsp"> 注册</a> </form> </body> </html>
IUserDAO接口代码如下: package org.easybooks.bookstore.dao; import er; public interface IUserDAO { public User validateUser(String username,String password); public void saveUser(User user); } UserDAO类代码所示。
通过之前的实践我们知道dao接口能将操作数据库的动作细节与前端代码相隔离但是dao所封装的仅仅是最基本的数据库操作而实际应用中web网站的每一项功能往往都是以业务service的形式提供给用户的业务就是一组包括增删改查在内的操作数据库的动作序列对系统某个应用功能的优化和增强通常要对该功能对应业务中动作的种类数目和调用次序进行改变和重组
例如,登录功能的实现原来只要调用DAO接口的validateUser( )方法就行, 现在情况发生了变化,考虑到有新加入的用户起初连帐号也没有,需要先注册 再登录,为了方便操作,增强的登录功能要求先后调用DAO接口的saveUser()
(用于注册)和validateUser()两个方法。通行的做法是将这两个动作
4.1 4.2
网上书店的架构 搭建项目框架 注册、登录和注销功能开发
4.3
4.1.1 功能需求和展示 1.主界面 网上书店购书界面如图4.1所示。
2.功能模块 网上书店是一个典型的基于Web网站的Java EE软件系统,集成了诸多的功 能模块,主要包括: (1)显示图书分类。 (2)用户可以根据分类浏览某一类图书列表。 (3)用户可以查看具体某一本书的简介。 (4)在图书浏览页只要单击【购买】按钮,就可把选定的图书加入购物车 中。 (5)用户可以随时单击 ,查看车中已购图书的信息。 (6)已登录的用户可以单击【结账】按钮下订单。 (7)使用需先注册,在注册页填写个人信息,确认有效后成为新用户。 (8)用户在登录页填写用户名和密码,确认正确后才可结账。
实践任务:
在三个框架全整合的基础上,开发一个业务层,给Web登录而程序增加一个 服务(注册+登录)的功能。建立项目: jsp_struts2_spring_service_dao_hibernate。
1.添加Spring核心容器
2.添加Hibernate并持久化user表 3.添加Struts 2框架 4.Struts 2与Spring集成 ① 添加Spring支持包。 ② 配置web.xml文件。 打开web.xml文件,增加Spring的配置,代码所示。 ③ 创建struts.properties。 在src目录下创建struts.properties文件,把Struts 2的类的生成交给Spring完成: struts.objectFactory=spring;
register.jsp的代码如下:
<%@ page language="java" pageEncoding="utf-8"%> <html> <head><title>注册页面</title></head> <body> <form action="register.action" method="post"> 用户注册<br> 用户名:<input type="text" name="ername" size="20"/><br> 密&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="text" name="user.password" size= "21"/> <br> <input type="submit" value="提交"/> </form> </body> </html>
各功能模块的划分如图4.2所示。
架构设计的基本宗旨是尽量做到各模块的独立性(理想情况:一个功 能对应一个JavaEE组件),功能实现与界面开发相分离,互不干扰。
为了达到上述的功能需求并实践这个设计宗旨,在第三章SSH2多框架配合 的基础上还必须引入一个业务层(Service层)。 那么,业务层有什么作用呢? 通过之前的实践,我们知道,DAO接口能将操作数据库的动作细节与前端 代码相隔离,但是DAO所封装的仅仅是最基本的数据库操作,而实际应用中 Web网站的每一项功能往往都是以业务(Service)的形式提供给用户的,业务 就是一组(包括增、删、改、查在内的)操作数据库的动作序列,对系统某个 应用功能的优化和增强,通常要对该功能对应业务中动作的种类、数目和调用 次序进行改变和重组。
welcome.jsp的代码如下:
<%@ page language="java" pageEncoding="gb2312"%> <%@ taglib prefix="s"ml> <head><title>成功页面</title></head> <body> <s:property value="ername"/>,您好!欢迎光临叮当书店。 </body> </html>
error.jsp的代码如下:
<%@ page language="java" pageEncoding="gb2312"%> <html> <head><title>失败页面</title></head> <body> 登录失败! </body> </html>
10.部署运行 部署项目、启动Tomcat服务器。在浏览器中输入 http://localhost:8080/jsp_struts2_ spring_service_dao_hibernate/并回车,出现如 图4.3所示的登录首页。
向book表输入记录:
INSERT INTO book VALUES(1, 4, ' 3.5实用教程', 38, '3.5.jpg'); INSERT INTO book VALUES(2, 1, 'C#实用教程', 43, 'CSharp.jpg'); INSERT INTO book VALUES(3, 1, 'C实用教程', 36, 'C.jpg'); INSERT 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 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'); INSERT INTO book VALUES(14, 1, 'Visual C++教程(第2版)', 25, 'VC++.jpg');
3.创建数据库 网上书店有以下5个实体:用户、图书分类、图书、订单、订单项,因此, 本系统的数据库设计如图4.11所示。
根据图4.11所示的设计模型,用CASE工具生成SQL语句,代码所示。 最终生成的表如图4.12所示,每个实体对应一个表,总共5个表。
向catalog表输入记录的SQL语句: INSERT INTO catalog VALUES(1, 'C语言程序设计'); INSERT INTO catalog VALUES(2, 'Java开发'); INSERT INTO catalog VALUES(3, '数据库'); INSERT INTO catalog VALUES(4, '网页编程');
相关文档
最新文档