第1章 前 言
1.1 开发背景
随着Internet在中国的迅速发展,人们日常生活中越来越多地使用Web技术来为自己的工作和学习服务。由于Web页面能把文本、图像、声音、动画、视像等多种媒体信息集于一体,不但使信息的显示更加生动,而且使信息的浏览更为方便,同时Web页能实现网上交易平台、客户信息反馈等功能,方便了企业与客户之间的信息交流,因此许多企业为增强知名度,以网站作为对外的展示窗口,进行内外信息交流。这也是企业面临的商机和挑战。
服装厂正在扩大规模,而且涉及到了出口生意。服装厂的客户很多,分布于各地,甚至还有国外。每次有了新款式的服装时,不是所有的客户都能很方便的来到服装厂看货。所以通知客户的工作很繁琐,因为要给每个客户都发去新款式的数码照片,这是个多次重复而且复杂的工作。另外,客户通知服装厂订货大部分都是通过现场洽谈或者是电话来确定的,很不方便,而且对于现在的时间就是商机的现状,这样的效率是应该提高的。所以我设想开发这样的一个网站。
1.2 开发目标
开发目标有如下7点:
 能够在系统上展示产品,包括文字信息和图片信息。
 能够管理客户的信息。
 能够动态的给建立关系的客户赋予几种不同级别的权限,不同级别的客户可以看到不同浏览级别的产品。
 客户通过Internet浏览商品信息,可以在网上下订单。
 能够给产品设定不同的浏览级别。
 能够对产品的订货次数进行统计,对服装厂进行简单的决策支持。
 要求系统运行安全稳定。
1.3 项目意义
项目的意义有如下5点:
 服装企业有了自己的网站,可以将产品信息放在网站上,供所有浏览该网站的顾客浏览,可以起到宣传和广告的作用。
 任何人都可以注册为网站的用户,可以在网上下订单,这样可以增加客户的数量,扩大销售渠道,为客户提供方便。
 固定客户被赋予一定的权限之后统一到网站上浏览新产品的信息和下订单。这样可以省去服装企业为每个客户发送新款产品照片的这一繁琐工作,提高了工作效率,减少了失误。
 一些老款式的服装信息可以长期保存,比如说某个客户想要几年前的某个款式或者是某种面料,开发了这个网站后既方便服装厂又方便了客户。
 通过留言板,及时了解顾客对企业的意见和产品信息的反馈,为及时与顾客沟通信息提供了方便的平台。使企业及时地了解顾客的需求,及时地更新产品,更好的为顾客服务,提高企业的市场竞争力。
总之,本项目在提高服装厂工作效率的同时,也能起到广告宣传的作用,正所谓一举多得。
第2章 开发工具及运行环境
本课题的开发工具有Java、MySQL数据库、Hibernate中间件、Tomcat等,运行环境包括软件环境和硬件环境。
2.1 软件环境
1. Java
Java能使软件在很小的机器上运行,基础解释和类库支持的大小约为40KB,增加基本的标准库和线程支持的内存需要增加125KB。它的特性列举如下:
 Simple And Familiar(简单熟悉)。
 Distributed(分布式)。
 Object-Oriented(面向对象,OO)。
 健壮特性。
 Secure(安全)。
 Architecture-Neutral(结构中立)。
 Portable(可移植性)。
 Multi Threaded(多线索、多线程)。
 Somewhat Interpreted(部分解释)。
 High Performance(高性能)。
 Dynamic(动态)。
2. MySQL数据库
MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储信息、如何检索这些信息以及需要数据结合什么性能和功能的时候提供最大的灵活性。选择如何存储和检索数据的这种灵活性是MySQL为什么如此受欢迎的主要原因。其他数据库系统(包括大多数商业选择)仅支持一种类型的数据存储。遗憾的是,其他类型的数据库解决方案采取的是一个尺码满足一切需求”的方式,这就意味着要么牺牲一些性能,要么就用几个小时甚至几天的时间详细调整数据库。使用MySQL,仅需要修改使用的存储引擎就可以了。
MySQL中的数据用各种不同的技术存储在文件或者内存中。这些技术中的每一种都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能。
3. Hibernate中间件
对象和关系数据其实是业务实体的两种表现形式。业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承的关系,而在数据库中,关系数据无法直接表达多对多的关联和继承关系。因此把对象持久化到关系数据库中,需要进行对象关系映射(Object/Relation Mapping,简称ORM),这是一项繁琐耗时的工作。
选择Hibernate作为中间件的原因如下:
 它可以对JDBC API进行封装,负责Java对象的持久化,在分层的软件架构中它位于持久化层,封装了所有数据访问的细节,使业务逻辑层可以专注于实现业务逻辑。
 它可以方便地使用数据库连接池。而且它是开放源代码。
4. Tomcat
Tomcat是一个免费的开源的Servlet容器,它是Apache基金会的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总能在Tomcat中得到体现。Tomcat被JavaWorld杂志的编辑选为2001年度最具创新的Java产品,可见其在业界的地位。由于Java的跨平台特性,基于Java的Tomcat也具有跨平台性。很多中小应用不需要采用EJB等技术,JSP和Servlet已经足够,这时如果用应用服务器就有些浪费了。而Tomcat短小精悍,配置方便,能满足我们的需求,这种情况下我们自然会选择Tomcat。Tomcat也可以与其他一些软件集成起来实现更多的功能。现举例如下。
 与JBoss集成起来开发EJB。
 与Cocoon(Apache的另外一个项目)集成起来开发基于XML的应用。
 与OpenJMS集成起来开发JMS应用。
除了以上提到的这几种,可以与Tomcat集成的软件还有很多。Tomcat确实是一个很好的工具,不仅仅因为其免费,功能强大,更因为其开放性。如今,开源软件越来越受到人们的重视,Linux就是一个成功的典型。人们不再只限于使用软件,而且已经关心起软件的具体实现。我们有理由相信Tomcat会走得更远。
5. 软件环境的安装与配置
以上介绍的软件安装都很简单,其中JDK和MySQL的安装软件是可运行程序。只需直接安装即可。Tomcat、Hibernate的安装文件是压缩软件包,只需把压缩文件解压到本地磁盘,安装好后需在操作系统中设置环境变量。
2.2 硬件环境
本系统开发的硬件环境如下:
 Pentium(R)4 CPU 2.80GHz。
 768 MB的内存。
 操作系统为Windows XP。
 网络连接速度为512KB。
在本论文的性能测试部分中,会给出在这种硬件条件下的性能测试结果,以供服装厂参考配置服务器
第3章 系统需求分析
进行应用软件系统的研发,首先必须准确了解与分析用户的需求。需求分析是整个设计过程的基础,它将直接影响应用程序的开发速度与质量。
3.1 功能需求分析
经过现场调研,下面给出用户对系统的功能需求。
1. 用户管理
用户管理自然是每个网站必不可少的,在本系统中,要求这部分管理安全可靠,权限分明,且其在前台和后台的表现不同,下面将分别进行介绍。
(1)前台表现
 用户注册,此时要保证系统不受注册机的攻击,要采用验证码技术。
 要确保权限为普通用户。
 要有密码保护措施,保证用户设定之后可以找回遗忘的密码。
(2)后台表现
 系统管理员可以添加用户。
 系统管理员可以动态的给用户赋予权限,保证系统信息不外泄。
 系统管理员可以修改和删除用户信息。
 系统管理员可以给用户建立备注信息,其仅对具有权限的用户可见。
2. 类别管理
(1)前台表现
 类别首先分为男装、女装、童装三个大的固定类别。在每个大的类别之下,可以动态的添加或者删除小类别。示例:短裙、长裙均属于女装,女装为固定类别,而短裙、长裙则为小类别。
 产品按照类别来展示,用户通过不同的类别进入不同的产品区。
(2)后台表现
 系统管理员可以动态的添加或者删除小类别。
 类别必须先于产品存在,换言之,每件产品必须属于一个类别。
3. 品牌管理
品牌可以为企业起到广告宣传的作用。
(1)前台表现
前台表现为展示品牌文化,对该类品牌进行详尽介绍,可以起到宣传的作用。
(2)后台表现
 系统管理员可以动态添加和删除品牌。
 品牌必须先于产品存在,换言之,每件产品必须属于一个品牌。
4. 产品管理
产品管理是本系统的根本,安全可靠和按照权限展示是这部分的要求,要操作方便、展示美观。
(1)前台表现
 产品展示中可以通过大类别→小类别分级展示产品。
 要根据访问前台的用户级别不同而展示相应级别的产品,以防厂家的商业秘密外泄。
 产品图片要保证不失真。
(2)后台表现
 系统管理员可以动态添加、修改和删除产品。
 必须为产品指定产品小类别。
 必须为产品指定产品品牌。
 产品信息要包含一幅或者多幅图片,图片的格式为JPG格式,文件小于200K。上传速度要快。
 对产品的订货次数进行统计,以便于对服装厂进行简单的决策支持。
 系统管理员可以动态调整产品的浏览级别。
5. 网上订单管理
网上订单能够带来的方便和快捷是服装厂所期待的。
(1)前台表现
 用户可以看到自己所有订单的历史记录,以便用户自己做一些统计或者备忘。
 和服装厂建立业务往来的用户,可以在网上下订单,订单信息包括产品型号和数量,且这两项数据要求进行校验。
(2)后台表现
 系统管理员可在后台查看所有和服装厂建立业务关系的用户订单,从而决定是留下或者是删除。
 若无特殊情况,要保证所有业务的用户订单都能够长久保留,这些历史数据可以为服装厂做统计或者做账目提供依据。
6. 新闻管理
发布新闻或者公告虽然不是本系统的重要部分,却是不能少的部分,倘若这一部分利用好,带来的商机也是不容小视的。
(1)前台表现
前台的表现是展示新闻,用户可以查阅。
(2)后台表现
后台的表现是系统管理员可以动态添加和删除新闻。
7. 留言管理
现在的企业网站都要有沟通的平台。大规模的一般为论坛,中小规模的网站一般是留言板。在本系统中,留言板是服装厂和用户之间沟通的桥梁,也是用户之间沟通的媒介。
(1)前台表现
 分页显示留言。
 用户、服装厂自身可以发表留言。
(2)后台表现
后台的表现为系统管理员可以查看所有留言,并且可以对留言进行审核,也可以删除留言。
3.2 用例图分析
用例图是对包括变量在内的一组动作序列的描述,系统执行这些动作并产生传递特定参与者的价值的可观察结果。用例图主要的作用有以下三个。
 获取需求。
 指导测试。
 对其他工作流起到指导作用。
1. 产品管理用例图
产品管理用例图如图3.1所示。
图3.1 产品管理用例图
提示:服装厂发布产品信息,包括添加、修改、删除等基本操作。用户在产品展示模块中可查看产品信息服装厂发布产品信息,包括添加、修改、删除等基本操作。用户在产品展示模块中可查看产品信息。
2. 用户管理用例图
用户管理用例图如图3.2所示。
图3.2 用户管理用例图
提示:系统管理员可以添加用户、修改用户、删除用户、管理前台注册用户信息、动态为前台注册的用户赋予不同的访问权限。浏览者可以注册。
3. 订单管理用例
订单管理用例图如图3.3所示。
图3.3 订单管理用例图
管理员在后台查看所有和服装厂建立业务关系的用户订单,决定是留下或者删除订单。和服装厂建立业务往来的用户,可以在网上下订单,也可以看到自己所有订单的历史记录。
3.3 性能需求分析
性能需求有以下3个方面:
 安全可靠,权限机制完善,防止信息外泄。
 可以防止注册机的攻击,要求采用验证码技术。
 可满足1000个用户同时在线访问。
第4章 系统总体设计
在对开发系统进行全面分析调查的基础上,制定出应用软件的总体设计规划,对建立一个大型的信息系统来说是必须的,也是全面展开开发工作的重要基础。系统总体设计包括:系统功能模块图设计、数据库设计、系统类图设计、软件体系结构设计等。
4.1 系统功能模块图设计
系统功能模块图如图4.1所示。
图4.1 系统功能模块图
4.2 数据库设计
数据库的设计是按照以下分析进行的。
 浏览级别:产品的属性,用来设定产品提供给何种级别的用户浏览,分为所有浏览者、普通用户、系统用户、普通业务用户、高级业务用户5类。
 产品大类别:分为男装、女装、童装3类。
 产品小类别:分属于产品大类别,将产品大类别进一步分类。
 产品品牌:产品所属的品牌。
 留言板:分为中文版、英文版两类。
 用户级别:分为普通用户、系统用户、普通业务用户、高级业务用户4类。
1. clothes表
clothes如表4.1所示。
表4.1 clothes表
字段名 SQL类型 说明
ID Long 主键,对象标识符
CLOTHID String 产品编号,由用户指定
NAME String 产品名称,由用户指定
TYPE Char 产品的浏览级别
BIGTYPE Char 产品所属的大类别
DESCRIPTION String 产品的详细信息
DESCRIPTIONENGLISH String 产品的英文详细信息
KIND_ID Long 产品所属的小类别
TRADEMARK_ID Long 产品所属的品牌
REGISTERED_TIME Timestamp 入库时间
2. clothesorders表
clothesorders如表4.2所示。
表4.2 clothesorders表
字段名 SQL类型 说明
ID Long 主键,对象标识符
CLOTH_ID Long 产品的ID
ORDER_ID Long 订单的ID
NUMBER Int 订货数量
3. kinds表
kinds如表4.3所示。
表4.3 kinds表
字段名 SQL类型 说明
ID Long 主键,对象标识符
NAME String 类别名称
NAMEENGLISH String 类别英文名称
TYPE Char 类别所属产品大类
4. messages表
messages如表4.4所示。
表4.4 messages表
字段名 SQL类型 说明
ID Long 主键,对象标识符
TITLE String 留言标题
DESCRIPTION String 留言内容
TYPE Char 留言板块
USER_ID Long
REGISTERED_TIME Timestamp 留言时间
5. news表
news如表4.5所示。
表4.5 news表
字段名 SQL类型 说明
ID Long 主键,对象标识符
TITLE String 新闻标题
TITLEENGLISH String 新闻英文标题
DESCRIPTION String 新闻内容
DESCRIPTIONENGLISH String 新闻英文内容
REGISTERED_TIME Timestamp 新闻发布时间
6. orders表
orders如表4.6所示。
表4.6 orders表
字段名 SQL类型 说明
ID Long 主键,对象标识符
USER_ID Long 下订单用户
REGISTERED_TIME Timestamp 下订单时间
7. pictures表
pictures如表4.7所示。
表4.7 pictures表
字段名 SQL类型 说明
ID Long 主键,对象标识符
PATH String 图片存储路径
CLOTH_ID Long 图片所属的产品ID
8. trademarks表
trademarks如表4.8所示。
表4.8 trademarks表
字段名 SQL类型 说明
ID Long 主键,对象标识符
NAME String 品牌名称
NAMEENGLISH String 品牌英文名称
DESCRIPTION String 品牌详细介绍
DESCRIPTIONENGLISH String 品牌英文详细介绍
PICTUREPATH String 品牌商标图片的存储路径
9. users表
users如表4.9所示。
表4.9 users表
字段名 SQL类型 说明
ID Long 主键,对象标识符
NAME String 用户名
PASSWORD String 密码
EMAIL String 电子邮箱
TELEPHONE String 电话号码
ADDRESS String 地址
TYPE Char 用户级别
REGISTERED_TIME Timestamp 注册时间
DESCRIPTION Text 备注信息
QUESTION String 密码提示问题
ANSWER String 密码提示问题答案
4.3 系统类图设计
根据分析,本系统有下列8个类:产品类(Clothes)、类别类(Kinds)、留言类(Messages)、新闻类(News)、订单类(Orders)、图片类(Pictures)、品牌类(TradeMarks)、用户类(Users),系统类图如图4.2所示。
图4.2 系统类图
4.4 软件体系结构设计
本系统软件层的结构可分为以下4层。
 表示层:提供与用户交互的界面。
 业务逻辑层:实现各种业务逻辑。
 持久化层(Hibernate):封装了数据访问的细节,为业务逻辑层提供了面向对象的API。
 数据库层:负责存放和管理应用的持久性业务数据。
软件体系结构如图4.3所示。


图4.3 软件体系结构图
第5章 系统详细设计
详细设计的工作包括输入输出设计和界面设计,即根据总体设计的每个功能模块要求和数据库的逻辑结构,利用相应的开发工具设计出应用系统的过程。
5.1 输入输出设计
输入输出是系统与用户的主要交互界面,其设计的好坏直接影响系统的性能,这里力求达到界面友好、信息直观和操作方便。
1. 后台管理→用户管理→添加用户
图5.1所示为添加用户的界面,包括全部用户信息。其用户级别为一下拉列表,用户分为两类,即系统用户和普通用户,可由用户选择;其他栏目由用户输入。
图5.1 添加用户界面
2. 后台管理→类别/品牌→添加类别
图5.2所示为后台管理的添加类别界面。类别的中文名和英文名由用户输入,例如:牛仔服、针织、西装、裙装等;类别所属大类以下拉列表的形式供用户选择,包括女装、男装、童装等。
3. 后台管理→类别/品牌→添加品牌
图5.3所示为后台管理的添加品牌界面,可通过该界面为经营的服装品牌添加信息。

图5.2 添加类别界面 图5.3 添加品牌界面
4. 后台管理→产品管理→添加产品
图5.4所示为后台管理的添加产品界面,可通过该界面为服装的产品添加信息。查看级别规定了能查看该产品的用户;产品类别包括产品所属的大类和小类,小类在前,大类在后。
图5.4 添加产品界面
5. 前台展示→用户注册
图5.5所示为用户的注册界面,用户通过该界面输入个人信息。
图5.5 用户注册界面
6. 前台展示→生成订单
图5.6所示为前台用户的生成订单界面。当用户选择了产品且输入了数量后,单击添加该产品”按钮即可生成一订单条目,用户确认订单条目后,单击提交该订单信息”按钮即可提交订单。单击清除该订单信息”按钮将清除订单信息。
图5.6 生成订单界面
5.2 界面设计
界面是软件的门面,应达到美观、舒适、操作方便、信息准确全面、结构合理等标准。
1. 后台管理界面
后台管理界面采用传统的菜单管理框架,如图5.7所示。
图5.7 后台管理界面
2. 前台系统首页
用户一打开该网站,就应通过登录首页对该网站的功能一目了然,网站的背景采用精美的时装造型吸引顾客的注意力。用户可以根据男装”、女装”、童装”等不同的类别浏览该企业的产品信息,也可以通过品牌”的分类来浏览企业的产品信息。联系我们”提供了该企业的相关信息,留言板”使用户可以方便的留下意见和建议。
前台系统首页如图5.8所示。
图5.8 前台系统首页
3. 前台主要展示界面
产品展示界面为用户浏览商品信息的主要界面。按不同的分类浏览(女装、男装、童装、品牌),不同的分类其商品信息也不同,但功能风格相同,在这里只给出女装的展示界面。每种产品都以小图片和简介的形式展示,单击查看详情”按钮可以查看商品的详细信息和放大图片,以直观的形式介绍产品。另外在该界面中,用户可以直接注册和登录,还有企业的常用联系方式、商品的类别,从而为用户的操作提供了方便。
产品展示界面如图5.9所示。
图5.9 产品展示界面
第6章 系统代码设计
6.1 软件的体系结构
本系统软件层结构分为4层:即表示层、业务逻辑层、持久化层和数据库层。各层实现的具体方法如下。
1. 表示层
表示层提供与用户交互的界面,用Web页面实现。
2. 业务逻辑层
业务逻辑层实现各种业务逻辑。这一层在系统中的体现是分为两个方面的:
① 封装并且分层的纯Java应用程序,为②提供API,相当于做成组件的形式。
② 在Web页面中实现各种业务,在这里调用①中提供的各种接口。
其中,在①里提到的纯Java应用程序又分为两类:即持久化类和业务逻辑类,下面将分别进行介绍。
(1)持久化类
Hibernate提供了从映射文件到Java源代码的转换工具,名为hbm2java工具。执行该任务的Java类为net.sf.hibernate.tool.hbm2java.CodeGenerator,可以用ANT工具来运行它,在build.xml文件中定义codegen target,代码如下:

description=Generate Java source from the O/R mapping files>

classname=net.sf.hibernate.tool.hbm2java.Hbm2JavaTask
classpathref=project.class.path/>

运行codegen target,只需要在DOS命令下进入clothes根目录,然后输入如下命令:
ant codegen
以上命令会自动创建***.java和***Finder.java文件,如Clothes.java、ClothesFinder.java等,如图6.1所示。


图6.1 创建文件
(2)业务逻辑类
业务逻辑类相当于实现业务。它提供接口,以供调用,业务逻辑类分为两层。
 FatherService.java是父类。
 ClothesService.java、ClothesOrdersService.java、KindsService.java、MessagesService.java、NewsService.java、OrdersService.java、PicturesService.java、TradeMarksService.java、UsersService.java是其子类。
下面为FatherService.java的源代码:
package mypack;
import javax.servlet.*;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;
import java.io.*;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.*;
public class FatherService
{
public static SessionFactory sessionFactory;
static
{
Try
{
Configuration config=new Configuration();
config.addClass(Users.class);
config.addClass(Clothes.class);
config.addClass(ClothesOrders.class);
config.addClass(News.class);
config.addClass(Orders.class);
config.addClass(Pictures.class);
config.addClass(TradeMarks.class);
config.addClass(Messages.class);
config.addClass(Kinds.class);
config.addClass(Caipiao.class);
sessionFactory=config.buildSessionFactory();
}catch(Exception e){
e.printStackTrace();
}
}
}
提示:一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得session实例。它是线程安全的,同一个实例可被多个线程共享,它是重量级的,意味着不能随便创建和销毁SessionFactory实例。
3. 持久化层(Hibernate)
封装了数据访问的细节,为业务逻辑层提供了面向对象的API。本系统应用的是Hibernate ,如图6.2所示。
注意:此处只示意一个实体类对应一个表的情况,其他情况依此类推。


图6.2 应用Hibernate
4. 数据库层
数据库层负责存放和管理应用的持久性业务数据。Hibernate提供了从映射文件到数据库Schema的转换工具,即hbm2ddl。执行该任务的Java类为net.sf.hibernate.tool.hbm2ddl.SchemaExportTask。在本系统中是应用ANT工具来运行它的,首先在build.xml中定义schema target,代码如下:

description=Generate DB schema from the O/R mapping files>

classname=net.sf.hibernate.tool.hbm2ddl.SchemaExportTask
classpathref=project.class.path/>
quiet=no text=no drop=no
output=schema/sampledb.sqldelimiter=;>

运行schema target 的步骤如下。
步骤1:启动MySQL服务器。
步骤2:通过mysql.exe客户程序创建SAMPLEDB数据库,SQL命令为:
Create database SAMPLEDB;
步骤3:在DOS命令下进入clothes根目录,然后输入如下命令:
ant schema 
6.2 关键问题代码设计(1)——验证码技术
为防止用户利用机器自动注册、登录以及灌水,故而采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号生成一幅图片,图片里加上一些干扰元素(防止OCR),由用户肉眼识别其中的验证码信息并输入表单,再提交给网站验证,验证成功后才能使用某项功能。
验证码的实现流程是:
 服务器端随机生成验证码字符串,保存在内存中,并写入图片,发送给浏览器端显示。
 浏览器端输入验证码图片上的字符,然后提交服务器端,提交的字符与服务器端保存的字符进行比较,若一致就继续,不一致则返回提示。
攻击者编写的robot程序很难识别验证码字符,所以不能顺利的完成自动注册、登录以及其他操作。用户可以识别填写,这就实现了阻挡攻击的作用。
图片的字符识别就是看图片上的干扰强度了。就实际的效果来说,验证码只是增加攻击者的难度,而不可能完全的防止。
6.3 关键问题代码设计(2)——图片等比例缩放
这个技术在网络上早就已经不是秘密了,而且采用千篇一律的代码,之所以会把这段程序放在这里,是因为在后期测试的时候发现原来展示的图片都变了形,于是要想办法保证图片不能失真,我通过查找资料解决了这个问题,代码如下:

6.4 关键问题代码设计(3)——数据库连接池
Hibernate提供了默认的连接池实现,它的实现类为DriverManagerConnectionProvider,如果在Hibernate的配置文件中没有明确配置任何连接池,那么Hibernate就会使用这个默认的连接池。如下代码为Hibernate的配置文件。本系统在现阶段只使用这个连接池。
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/sampledb
hibernate.connection.username=root
hibernate.connection.password=1234
hibernate.show_sql=true
6.5 关键问题代码设计(4)——图片文件上传
文件上传在JSP教程上都有现成的代码,但是源代码不足之处在于要生成临时文件,这样要写磁盘,速度会很慢,而下面的代码是直接读取输入流,没有生成临时文件,故而上传速度有显著的提高。
try{
if(request.getContentLength()>(1024*1024))
{
%>

<%
}
float space=0;
float size=request.getContentLength();
float sizec=0;
String spp=RootPath+\picture\;
File ff=new File(spp);
if(!ff.exists())
{
ff.mkdir();
}
byte b[]=new byte[4096];
long stime;
ServletInputStream sis=request.getInputStream();
int istep=0;
int a=0;
int k;
String split;
String fileName;
String s;
RandomAccessFile random2;
File f2;
long itotal=0;
long ipretotal=0;
fileName=System.currentTimeMillis()+.jpg;
f2=new File(ff,fileName);
random2=new RandomAccessFile(f2,rw);
random2.seek( f2.length());
a=sis.readLine(b,0,b.length);
split=new String(b,0,a);
a=sis.readLine(b,0,b.length);
//check the sufferfix
s=new String(b,0,a);
if ( ( k=s.lastIndexOf(.))!=-1 )
{
if ( !((s.substring( k+1, s.length()-3 ).equals(jpg))||
(s.substring( k+1, s.length()-3 ).equals(JPG))))
{
random2.close();
sis.close();
out.print(上传发生中断错误!);///上传文件的格式错误页面
}
}
else
{
random2.close();
//random3.close();
sis.close();
out.print(上传图片格式错误!);
///上传文件的格式错误页
}
itotal=itotal+a;
a=sis.readLine(b,0,b.length);
itotal=itotal+a;
a=sis.readLine(b,0,b.length);
itotal=itotal+a;
stime=System.currentTimeMillis();
ipretotal=itotal;
while((a=sis.readLine(b,0,b.length))!=-1)
{
itotal=itotal+a;
session.setAttribute(iuploadbyte,String.valueOf( itotal));
if ( ( System.currentTimeMillis()-stime )> 0 )
{
session.setAttribute(iuploadspeed,String.valueOf(((
itotal-ipretotal)/1024.0)*1000.0/
(System.currentTimeMillis()-stime)));
stime=System.currentTimeMillis();
ipretotal=itotal;
}
s=new String(b,0,a);
if( istep ==0 )
{
if ( s.length()==0 )
{
random2.close();
//random3.close();
sis.close();
response.sendRedirect(../error/error.jsp?errorS=3);
///无上传视频文件错误页面
}
if( s.equals(split))
{
a=sis.readLine(b,0,b.length);
itotal=itotal+a;
a=sis.readLine(b,0,b.length);
itotal=itotal+a;
istep++;
}
else
{
random2.write( b, 0, a );
}
}
}
random2.close();
//random3.close();
sis.close();
String path=picture/+fileName;
if((fileName==null)&&(fileName.length()==0))
{
f2.delete();
out.print(出错了!);
}
picture.setPath(path);
picture.setClothes(cloth);
ps.savePicture(picture);
%>

<%
}catch(Exception e){}
第7章 系 统 测 试
7.1 软件测试常识
软件测试应该跨越整个软件开发流程。需求验证(自检)和设计验证(自检)也可以算作软件测试(建议称为需求测试和设计测试)的一种。软件测试应该是一个泛型概念,涵盖整个软件生命周期,这样才能确保周期的每个阶段都禁得起考验。同时测试本身也需要有第三者进行评估(信息系统审计和软件工程监理),即测试本身也应当被测试,从而确保测试自身的可靠性和高效性。否则自身不正,难以服人。
软件开发和使用的历史已经留给了我们很多由于软件缺陷而导致巨大财力、物力损失的经验教训。这些经验教训迫使我们必须采取强有力的检测措施来检测未发现的隐藏软件缺陷。生产软件的最终目的是为了满足客户需求,我们以客户需求作为评判软件质量的标准,认为软件缺陷(Software Bug)的具体含义包括下面几个因素:
 软件未达到客户需求的功能和性能。
 软件超出客户需求的范围。
 软件出现客户需求不能容忍的错误。
 软件的使用未能符合客户的习惯和工作环境。
考虑到设计等方面的因素,我们还可以认为软件缺陷包括软件设计不符合规范、未能在特定的条件(资金、范围等)达到最佳等。可惜的是,很多人更倾向于把软件缺陷看成运行时出现的问题,认为软件测试仅限于程序提交之后。在目前的国内环境下,几乎看不到完整准确的客户需求说明书,再加上客户的需求时时在变,追求完美的测试变得不太可能。但是明确软件测试现实与理想的差距,在软件测试中学会取舍和让步,对软件测试是有百益而无一弊的。
7.2 系统功能测试计划
软件测试并不单纯等同于程序测试。软件测试应该贯穿整个软件定义与整个开发周期。因此需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应该是软件测试(评审)的对象。
在对需求理解与表达的正确性、设计与表达的正确性、实现的正确性以及运行的正确性的验证中,任何一个环节发生了问题都可能在软件测试中表现出来。
在这部分中,我个人确保每个阶段功能的实现,在系统完成后,每个分支都走过一遍,也有发现的问题,但都通过查阅资料将其解决了。
7.3 性能测试
测量Web服务器的性能是一项让人感到畏缩的任务,它不像一些简单的任务,如测量CPU的速率或者是测量程序占用CPU的比例,Web服务器的性能优化中包括调整许多变量来达到目标。许多的测量策略中都包含了一个看似简单的浏览,实际上是在向服务器发送大量的请求,这称之为客户端的程序,它用来测量响应时间。常见的问题有如下几个:
 客户端和服务器端是在同一台机器上吗?
 服务器在测试的时候还运行着其他的程序吗?
 客户端和服务器端的通信是通过局域网(100baseT、10baseT)还是使用调制解调器?
 客户端是否一直重复请求相同的页面,还是随机地访问不同的页面?
 客户端发送请求是有规律的还是突发的?
 是在最终的配置环境下运行服务的?还是在调试的配置环境下运行服务的?
 客户端的请求中包含图片还是只有HTML页面?
所有这些都是要关心的问题,并且几乎不可能精确地把所有的问题都列出来。
一般衡量Web性能的重要指标有以下几个:
 HTTP每秒交易数(Transaction Per Second)。
 每秒会话数(Sessions Per Second):每秒到达Web服务器的用户。
 并发用户数(Concurrent Users):特定时间在Web站点上的用户数。
 吞吐量(Throughput):在特定时间内由Web站点发出的数据流量带宽,它与服务器提供服务的内容和交易数相关。
基于以上的要求,最合适的测试方法无非是通过一定的访问量来实现,但是这样的工作谈何容易,这种思路的测试就是压力测试。俗话说:工欲善其事,必先利其器”,压力测试只有借助于一些工具才可得以实施。大多数Web压力测试工具的实现原理都是通过重复的大量页面请求来模拟多用户对被测系统的并发访问,以此达到产生压力的目的。产生压力的手段都是通过录制或者是编写压力脚本,这些脚本以多个进程或者线程的形式在客户端运行,这样通过人为制造各种类型的压力,可以观察被测系统在各种压力状况下的表现,从而定位系统瓶颈,作为系统调优的基础。目前已经存在的性能测试工具林林总总,数量不下一百种,从单一的开放源码的免费小工具,如Apache自带的Web性能测试工具(Apache Benchmark、开源的JMeter)到大而全的商业性能测试软件,如Mercury的LoadRunner、Siege等。
Apache JMeter是一个专门为运行和服务器装载测试而设计的100%的纯Java桌面运行程序。最早它是为Web/HTTP测试而设计的,但是现在它已经扩展,从而支持各种各样的测试模块。它和用于HTTP和SQL数据库(使用JDBC)的模块一起运送。它的功能举例如下:
 用来测试静止资料库或者活动资料库中的服务器的运行情况。
 用来模拟对服务器或者网络系统加以重负荷,以测试它的抵抗力。
 用来分析不同负荷类型下的所有运行情况。
 它还提供了一个可替换的界面用来定制数据显示,测试同步及测试的创建和执行。
 用于测试静态或者动态资源的性能(如文件、Servlets、Perl脚本、Java对象、数据库和查询、ftp服务器或者其他的资源)。
 用于模拟在服务器、网络或者其他对象上的附加高负载以测试它们提供服务的受压能力。
总之,你可以用JMeter提供的图形化界面分析性能指标或者在高负载情况下测试服务器、脚本、对象的行为。
下面是我模拟的几组测试数据,测试页面:前台产品展示→女装,假定该页的访问量为10次/秒,测试报告如表7.1所示。
表7.1 测试报告1
模拟用户数 访问次数 样本数目 平均响应时间 并发访问 Bytes
1 1 1 297 否 13409
1 20 20 335 否 13409
1 50 50 311 否 13409
1 100 100 326 否 13409
1 1000 1000 328 否 13409
5 1 5 1484 否 13409
5 1 5 1443 是 13409
20 1 20 4375 否 13409
20 1 20 6094 是 13409
100 1 100 21330 否 13409
测试页面:前台产品展示→女装,假定该页的访问量为1次/秒,测试报告如表7.2所示。
表7.2 测试报告2
模拟用户数 访问次数 样本数目 平均响应时间 并发访问 Bytes
1 1 1 297 否 13409
1 20 20 297 否 13409
1 50 50 312 否 13409
1 100 100 295 否 13409
1 1000 1000 313 否 13409
5 1 5 234 否 13409
5 1 5 1453 是 13409
20 1 20 235 否 13409
20 1 20 5737 是 13409
100 1 100 260 否 13409
1000 1 1000 320 否 13409
通过测试,可得以下结论:
 现在我们把所有的信息都归结到平均响应时间的需求上来,根据上面测试得到的数据,发现几个非常大的响应时间都是并发访问情况下得到的,在并发情况下JMeter将会在测试的开始就建立全部线程并立即发送访问请求,这样一来就很容易使服务器饱和,更重要的是会隐性地增加了负载,服务器将可能过载,不是因为平均访问率高而是因为所有线程的第一次并发访问而引起的不正常的初始访问峰值,可以通过JMeter的聚合报告监听器看到这种现象。这种异常,虽然不是我们测试所需要的,但是这提示了我们一个问题,可能会面对这样的服务器攻击。
 平均响应时间会随着每秒访问次数的增大而增大,所以能够模拟到网站的平均点击率,对于这个压力测试是很有帮助的。在1次/秒的访问量下,平均响应时间大约在260ms。
第8章 系统运行与维护
本节将从系统应用的目录结构、系统安装及使用说明、数据备份3个方面进行介绍。
8.1 系统应用的目录结构
系统应用目录的结构如图8.1所示。


图8.1 系统应用目录结构图
通过上图可以看出以下几点:
 clothes:为本系统的根目录,它包含的目录有clothShow、picture、软件工具、manageBack、src、Web-INF、schema、lib、build.xml、web.xml等。
 clothShow:前台JSP页面的根目录。
 picture:存放产品的图片。
 软件工具:存放该系统软件所用到的软件工具。
 manageBack:存放该系统后台JSP页面的根目录。
 src:为了应用Hibernate设定的目录,其中的mypack存放对象关系的映射文件。
 WEB-INF:为该系统作为一个独立的Web发布系统而设定的目录。
 schema:存放数据库方案。
 lib:存放所有需要用到的jar文件。
8.2 系统的安装
系统的安装有如下6步。
步骤1:该网站需要安装的软件环境(Tomcat 5.0、MySQL 5.0、Hibernate、ant)前面已有详细的介绍,这里不再赘述 ,这些工具在根目录的软件工具”文件夹下,分别安装即可。
步骤2:安装完运行环境之后环境变量的设置如下:
ant_home D:gaoyuanHibernatesoftwareapache-ant-1.5.4
//此处为ant工具的安装目录
classpath.;
C:j2sdk1.4.2lib ools.jar;
C:j2sdk1.4.2libservlet.jar;
C:Tomcat5.0commonlibservlet-ap
java_home C:j2sdk1.4.2 //此处为Java的安装目录
path %java_home%in;%ant_home%/bin
tomcat_home C:Tomcat 5.0 //此处为Tomcat的安装目录
步骤3:将已经打包好的clothes文件夹作为服装厂的工作目录,放置在Tomcat的工作目录Webapps下。出于安全角度的考虑,在clothes文件夹下已经设定了Web-INF文件夹,而且独立工作的所有设定都已完备。可以将clothes放置在和Tomcat不同的磁盘下,然后设置虚拟目录,方法如下:在Tomcat的ROOT目录下有个web.xml文件,在这个文件中添加如下的语句即可。
docBase=d:/www/jsp
crossContext=true
debug=0
reloadable=true
trusted=false>

其中path的值是虚拟目录,docBase的值是硬盘目录的绝对路径。
步骤4:在数据库中创建sampledb数据库。
步骤5:在命令行的提示符下进入已经打包好的系统根目录,运行如下命令:
ant schema
在这一步中运用ant工具,即根据已经配置好的Hibernate映射文件,自动生成数据库的所有表。
步骤6:在命令行的提示符下,进入已经打包好的系统根目录,运行如下命令:
ant run
在这一步中运用ant工具,即根据配置文件,生成一个系统用户,用户名为***,密码为123。
8.3 系统的数据备份
出于系统安全和稳定运行的考虑,系统的数据库应该得到定期的数据备份。至于定期的时间建议以三天备份一次为好,具体情况可以根据需要进行调整,数据备份的方法有以下两种:
 直接在MySQL目录的data下,备份sampledb文件夹。
 将数据通过导出导入法进行备份。
结 论
经过三个月的毕业设计,我完成了一个完整的B/S多层结构的系统,即该系统从分析、设计到实现的全部过程。在设计过程中,我通过查阅大量的相关资料、与同学交流经验、自学、并向老师请教等方式使自己学到了不少的知识,并大大地提高了动手能力。使我充分体会到了在创造过程中的艰辛探索和成功的喜悦。在整个毕业设计的过程中,我对数据库设计、Hibernate设计、XML语言和JMeter工具都进行了研究,从而对Java和JSP有了更进一步的了解,并且从整体上对流程的概念有了一个更深层次的模型印象,对软件开发的整体设计思路和一些公认的方法有了全新的理解。
本人利用基于Java的Hibernate、JSP和MySQL数据库技术为某服装经销商开发了一个基于Web的小型电子商务网站。该网站采用JSP动态网页技术实现了网站的业务逻辑,网站分为4层结构:JSP表示层、Java封装的业务层、Hibernate中间件以及MySQL数据库,并实现了用户的全部设计目标,在系统设计完成后,已采用JMeter工具完成系统的性能测试,其测试结果满足用户需求。该系统现已安装试运行并通过用户验收。
虽然该系统的功能还不是很完善,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。
致 谢
四年本科的学习和生活即将结束,在此论文完成之际,首先想到的是要感谢那些帮助和关怀过我的老师和同学们。
我首先要感谢我的论文导师*老师。她在论文的选题、研究思路的确定、资料的收集到论文的撰写、修改以及最后的定稿这一过程中,都对我严格要求,悉心指导,并给予了切实的建议,让我受益匪浅。她渊博的知识、严谨的治学态度给我留下了深刻的印象,她在学术研究上的经验和热心助人的精神,也使我深受教益。
此外,我还要感谢计算机系的许多其他老师,在我四年的本科学习期间,正是他们辛勤的传授、不倦的教诲,才为我最终完成毕业论文打下坚实的基础。
最后感谢各位评委老师对我毕业论文的审评。
参 考 文 献
略。
用户
服装厂
浏览产品
删除产品
修改产品
发布产品
表示层

电子商务网站设计与实现相关推荐

  1. 某单位招聘考试需要考核数学英语计算机,2010年10月自学考试电子商务网站设计原理试题...

    全国2010年10月高等教育自学考试 电子商务网站设计原理试题 课程代码:00906 一.单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将 ...

  2. 45个优秀的国外电子商务网站设计实例

    这篇文章与大家分享45个国外优秀的电子商务网站设计案例,希望能带给你灵感.对于电子商务网站来说,也许销售更多产品比漂亮的外观设计更重要,不过漂亮的东西总是能给用户留下深刻的印象,一起欣赏. TALBO ...

  3. 25个国外优秀电子商务网站设计案例

    优秀网站设计案例 分享35个非常漂亮的单页网站设计案例 25个国外优秀的餐饮网站设计案例欣赏 最新30个漂亮的个人作品集网页设计案例 30个非常优秀的网站导航菜单设计案例 12个优秀的 HTML5 网 ...

  4. 30 + 优秀电子商务网站设计灵感

    有效的电子商务网站设计时,可以更好的开展网上销售业务.这里有一个优秀的电子商务网站设计的集合. Investees Survival Simon Vuvuzela Hurtta Collection ...

  5. 计算机信息管理及电子商务,计算机信息管理专业电子商务网站设计精选.doc

    计算机信息管理专业电子商务网站设计精选 引 言 近些年来网络在中国已经走进千家万户,尤其在经济发达地区上网也已经成为人们日常生活中必不可少的一部分,随着技术的提升网购也已更安全更稳定,我本人早在几年前 ...

  6. 经典网页设计:12个优秀的电子商务网站设计案例

    现在越来越多的人喜欢在网上购物,像美容护肤,数码,电器,品牌服饰,家居生活,健康保健等各种生活用品都可以轻松网购.对于电子商务网站来说,让用户在购物过程中简单快捷是最重要的,其次是要有精美的页面设计以 ...

  7. 电子商务网站设计的艺术

    Before you can design a winning Website you need a comprehensive design blueprint, and that begins w ...

  8. MySQL数据库——案例:电子商务网站设计

    目录 1.需求分析 2.准备工作 3.商品分类表 4.商品表 5.商品规格表 6.商品属性表 7.用户表 8.评论表 在了解数据库设计的基本流程.规范以后,为了学以致用,本节将以电子商务网站为例,演示 ...

  9. 小型电子商务网站设计原则

    最近谈得最多的话题莫过于大规模,大数据量,高性能,高并发等架构话题,其实一个电子商务网站开始时一定是小规模,小数据量,用不着把架构弄得过于复杂.高度设计.过度扩展(高德纳大爷也说过,"过早优 ...

  10. 【艾琪出品】《计算机应用基础》【试题汇总3】《多媒体技术》《网页设计与制作》《电子商务网站设计与管理》《数据库原理》

    题目如下: 第一组: 一.SQL语句编写题 编写SQL语句 1.  设有学生选课关系SC(学号,课程号,成绩),试用SQL语句检索 每门课程的最高分. 2. 关系模式如下: 商品P(PNO,PN,CO ...

最新文章

  1. Eclipse-常用插件
  2. 模拟usb重新插拔_Android 10带来黑科技 检测手机USB接口是否有液体或者是否过热...
  3. 独家 | 使用机器学习预测房价(附链接)
  4. 视觉语言研究进展到哪了?CVPR2021视觉语言研究全面概述,附430页ppt
  5. Android ContentProvider和getContentResolver
  6. oracle重做日志文件版本不一致问题处理
  7. 关于图片缩放的两种方式
  8. socket.io笔记
  9. 快速创建 IEqualityComparer 实例:改进
  10. leetcode 96. 不同的二叉搜索树(Unique Binary Search Trees)
  11. JTable 的使用
  12. 精品课程教学网站中系统设计如何写
  13. 联想台式电脑序列号查看方法
  14. 姿态估计之CPN(Cascaded Pyramid Network)
  15. 文件服务器大量传送减负需要开启,网卡参数中的eee、流量控制、巨型帧、大量传输减负、中断节流率等名词都是什么意思doc.doc...
  16. Postgresql 使用 Pl/python实现邮件监控
  17. nrf52832 Uart 调试
  18. linux给文件夹腹权限,文件的权限_腹有诗书气自华的技术博客_51CTO博客
  19. 开启火狐浏览器 Firefox 原生「双击关闭标签页」功能
  20. RT-Thread:GD32E103 移植USB HOST

热门文章

  1. SpringBoot2.0系列教程(四)Springboot框架自定义消息转换器
  2. Domain Driven Design(领域驱动设计)
  3. python词组语义相似度_语义相似度
  4. 路由器和交换机的转发过程
  5. 串行接口与并行接口的概念与区别
  6. 魅族用fiddler抓包工具安装CA证书在哪里安装
  7. 设计一个雇员Employee类
  8. 【CQF Finance Class 3 债券】
  9. 张尧浠:美股反弹避险情绪降温、黄金迎美零售看回撤力
  10. 摄像头录像存储计算方式