基于B2C的网上拍卖系统—秒杀与竞价系统(论文+PPT+源码)
时间:2023-05-25 14:03:01 | 来源:网站运营
时间:2023-05-25 14:03:01 来源:网站运营
基于B2C的网上拍卖系统—秒杀与竞价系统(论文+PPT+源码):
分类号_______________ 密级________________
UDC _______________ 学号_ ___
毕业设计(论文)
论文题目 | 基于B2C的网上拍卖系统—秒杀与竞价 |
---|
Thesis Topic | Spike and Auction Design - B2C online auction-based system |
2017年 5 月 24日
毕业设计(论文)任务书
第1页
毕业设计(论文)题目:基于B2C的网上拍卖系统—秒杀与竞价毕业设计(论文)要求及原始数据(资料):1.综述国内外基于B2C的网上拍卖系统研究现状;2.深入了解基于B2C的网上拍卖系统及其插件的相关技术;3.熟练掌握基于B2C的网上拍卖系统的应用与分析,训练编写插件程序的能力;4.设计并实现基于B2C的网上拍卖系统中针对数据检查的插件;5.深入分析基于B2C的网上拍卖系统中插件的关键技术与编写语言;6.训练检索文献资料和利用文献资料的能力; 7.训练撰写技术文档与学位论文的能力。 |
---|
第2页
毕业设计(论文)主要内容:1.综述基于B2C的网上拍卖系统在现实生活中的应用;2.了解基于B2C的网上拍卖系统的相关技术;3.熟悉基于B2C的网上拍卖系统以及插件的开发环境; 4.设计基于B2C的网上拍卖系统中针对数据检查的插件;5. 深入基于B2C的网上拍卖系统中插件的关键技术与编写语言NASL的设计流程;6.熟练掌握基于基于B2C的网上拍卖系统平台的插件编写;7.设计与实现针对基于B2C的网上拍卖系统检查的插件的程序。学生应交出的设计文件(论文):1.内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;2.包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材料。 |
---|
第3页
主要参考文献(资料):曹建.电子商务与网上经营[M].电子科技大学出版社,2003耿祥义,张跃平.Java2实习教程[M] . 杭州:清华大学出版社, 2001. 李刚.疯狂java讲义[M]. 杭州:电子工业出版社, 王曰芬.电子商务网站设计与管理[M].杭州:杭州大学出版社,2002陶国荣. jQuery权威指南[M]. 机械工业出版社, 2011.肖晖,张玉清. Nessus插件开发及实例[J]. 计算机工程, 2007,(02)刘晓华,张健,周慧贞.JSP应用开发详解[M].电子工业出版社,2007Bob Reselman. Visual Basic 6.0 使用指南.电子工业出版社,2006.Craig Eddy. 中文Access 2000 24学时建设.机械工业出版社,2001.耿祥义,张跃平. JSP实用教程[M].杭州:清华大学出版社,2007.林金霖.ASP实物经典[M].杭州:中国铁道出版社,1999,12专业班级学生要求设计(论文)工作起止日期指导教师签字日期教研室主任审查签字日期系主任批准签字日期 |
---|
目录
摘要II
AbstractIIII
第1章 绪论11
1.1 选题背景11
1.2 项目的主要研究工作22
1.2.1 应用客户端程序及J2EE服务器22
1.2.2 WEB层组件22
1.2.3 客户层组件22
1.2.4 编写算法22
1.3 开发环境22
第2章 关键技术平台与理论介绍33
2.1 概念33
2.1.1 J2EE的概念33
2.1.2 JSP的概念及其特点33
2.1.3 Java Bean的概念33
2.1.4 Java Servlet的概念33
2.1.5 Session对象44
2.2 J2EE的结构44
2.3 J2EE的容器类型44
2.4 J2EE的体系与模式44
2.4.1 J2EE的体系(分布式计算)44
2.4.2 J2EE的模式44
2.5 JAVA三大框架55
2.5.1 Struts框架55
2.5.2 Spring框架66
2.5.3 Hibernate框架66
2.6 开发环境的搭建77
2.6.1 服务器配置77
2.6.2 Tomcat安装及配置77
2.6.3 数据库配置88
第3章 需求分析和可行性研究1111
3.1 问题的定义1111
3.2 需求分析1111
3.2.1 需求分析的过程1111
3.2.2 需求分析的方法1212
3.2.3 本软件研究方法1212
3.2.4 目标需求1313
3.2.5 功能需求1414
3.2.6 性能需求1616
3.3 可行性分析1616
3.3.1 经济可行性1616
3.3.2 技术可行性1616
3.3.3 操作可行性1717
3.3.4 法律可行性1717
第4章 系统总体设计1818
4.1 系统需求1919
4.1.1 系统需求描述1919
4.2 系统功能2020
第5章 系统设计与实现2121
5.1 系统数据库设计2121
5.1.1 系统E-R图2121
5.1.2 数据库表设计2222
5.2 前台页面管理2424
5.2.1 注册与登录2525
5.2.2 选择物品加入购物车2727
5.3 后台管理3131
5.3.1 修改密码3232
5.3.2 商品管理3333
5.3.3 订单管理3939
5.3.4 留言管理3939
第6章 系统测试与分析4040
6.1 程序调试4040
6.2 程序的测试4040
6.2.1 测试的重要性及目的4040
6.2.2 测试的步骤4141
6.2.3 测试的主要内容4242
第7章 安全性问题4444
结论4545
参考文献4747
致谢4848
附录一:英文文献原文4949
附录二:中文译文5757
基于B2C的网上拍卖系统—秒杀与竞价
摘要
网络商城近年来非常火热的一种经营方式,与现实生活中的商店的差别是利用电子商务的一些手段,从而沟通消费者与商家进行商品买卖的虚拟商店,减少买家卖家间的多层环节,减少运输的成本以及层层代理过程中的差价,这就有巨大的价格优势从而带来巨大的发展空间。网络商城尽可能带给消费者最大的利益,带动商品经济的快速发展,引领国民经济的稳固快速发展,推进国内经济形势的上扬。
本论文详细介绍了整个系统的已实现的各项功能。实现多种商品的维护功能;增加了用户留言的功能;能够收集用户的留言反馈使用户留言系统的主要功能,该功能可以依据用户提出的各种建议或是提供的留言反馈,在后期对该系统进行修正和完善;后台管理功能主要是管理员对网站持续的维护工作;后台管理功能主要包含的功能有:维护商品功能、查看秒杀拍卖促销、查看订单功能,这样做可以使系统得到实时更新,为用户查询提供更为准确的信息。
关键词 网上商城 秒杀 竞拍
Spike and Auction Design - B2C online auction-based system Abstract
Online Shopping Mall which is similar to real-world stores, the difference is the use of various means of e-commerce to reach virtual store selling process from buy to reduce intermediate links, eliminating transportation costs and agency in the middle of the post, created for ordinary consumption and increase market liquidity huge space for development. The best interests of consumers can also drive the development of the company and the business take off, guide steady and rapid development of the national economy, promote GDP.
This paper details the features have been implemented throughout the system. Maintenance functions to achieve a variety of goods; provides functional user message; user message function is mainly to collect user message, you can leave a message on the recommendation of user-supplied information or proposed to modify and improve the system; background management functions mainly administrator user maintenance work on the site; background management functions mainly includes the maintenance commodity function, see spike and promotions, view order functions, so do real-time updates, to provide users with more accurate information queries.
Key Words: Online Shopping Mall spike auction
第1章 绪论
1.1 选题背景
伴随着网络技术的广泛应用和高速发展,随着人们生活节奏的越来越快,越来越多的人们开始在网络中寻求便利。网络购物具备了省时、省事、省心、高效等特点,从而广泛被大众接受,并逐渐渗透到人们的生活中,成为人们日常生活中必不可少的一个部分。
在网络消费成为主流趋势的今天,淘宝、京东等网络购物平台为人们所熟知,在线购物成为大众购买商品以及商家出售商品追求简单、方便、快捷的最好方式。美食、服装、电子产品、奇奇怪怪的小商品、日用品等等森罗万象的各种商品,只需要轻松点击几个按钮就可以通过网络平台简单的搜索到并足不出户的购买到,更为便宜的价格、方便的购买、送货上门的服务,所有这些,都是在如今竞争激烈的市场环境中网上购物能够获得大量消费者亲赖的制胜法宝。特别是当今世界快时尚快节奏的引领,庞大的互联网用户群体,时尚潮流、科技前端、重大事件等各种信息通过互联网的快速传播,人们第一时间了解当今世界的同时,就能够通过网络购物的形式与世界相连,使每一个普通百姓都能参与到世界的变化当中来。
在如此的时代背景下,在庞大的人口基数下暗藏着庞大的客户群的当今中国,在蒸蒸日上经济形势下,毫无疑问选择创建网络商城是一个与时俱进并且前景非常光明的一条康庄大道,必将获得巨大的成功。
网络商城作为为广大的消费者群体与商家之间提供网络交易的平台,目的是能够为了广大网上商家与用户提供一个交流平等、信息安全、交易可靠、可全面支持各类商品销售的电子商务运营平台,消费者和客户或潜在的消费者和客户在这个平台上可以进行商品的查看、搜索、交易、交流。系统集会员、产品展示、订购系统、订单管理、促销管理、分类搜索、在线支付于一体。
富有特色的网络平台界面搭配简洁易操作的各项功能,吸引用户的目光并提升了用户体验,更为自由的页面展示搭配灵活的后台管理,方便管大的网络商家进行个性化的网络运营,打造网络商城的需求。
本项目研究的是基于B2C的网上拍卖系统的网上拍卖系统,让人们能通过互联网尽快的买到自己所中意的商品。
B2C(business-to-customer)期中“B”指的是商家,“C”指的是消费者,客户,B2C就是说商家与客户对接,也就是“商对客”,“商对客”这种新型的电子商务模式,就是现在所说的商业零售,是直接面向消费者销售服务和产品的方式。这种形式的电子商务大多以网络零售业为主经营业务,主要借助于互联网来开展在线销售活动。B2C即企业通过互联网平台为消费者提供一个新型的便捷的购物环境--网络商店、消费者通过互联网在网上购物、在网上进行支付。
1.2 项目的主要研究工作
本系统是基于时下最火的网上购物的现状,根据人们日常的使用习惯,设计了一个完整的基于B2C的网络拍卖系统。
该系统的模型构架分为以下四层结构,如下:
J2EE应用程序是由三大组件构成的。J2EE组件是具有独立功能的软件单元,J2EE组件在经过与之相关的类以及文件便可以合并成为J2EE应用程序,而且可以与其他的组件进行交互作用。本系统包括如下组件:
1.2.1 应用客户端程序及J2EE服务器
Java Servlet,JavaServer Pages(JSP)Web组件以及JavaBean。
1.2.2 WEB层组件
J2EE web层组件包含JSP页面或者Servlet。根据J2EE的相关规范,还包括一些JavaBean对象来对用户的输入进行处理,并将输入发送给运行在业务逻辑层上的相关组件来进行处理。
1.2.3 客户层组件
基于WEB方式的静态HTML、JSP页面应用程序。
1.2.4 编写算法
编写秒杀竞拍算法,解决完成秒杀竞拍功能。
1.3 开发环境
开发工具:Eclipse 。
运行环境:jdk1.7
服务器:Tomcat 7.0。
数据库:MySql。
操作系统:Windows 7。
所需内存:2 G。
第2章 关键技术平台与理论介绍
2.1 概念
2.1.1 J2EE的概念
J2EE是利用Java 2平台从而对企业解决方案的开发、布置和管理相关的复杂问题进行简化的一种体系构造。J2EE技术它的基础是核心Java平台或Java 2标准平台。J2EE不但稳固了标准版中的很多好的设计,比如在设计好代码之后可以在不同的平台上运行、便于使用数据库的JDBC API、CORBA技术及可以在网络应用里来保护数据的安全模式之类,与此同时它还提供了对EJB(Enterprise JavaBeans)、Java Servlet API、JSP(Java Server Pages)以及XML技术的全面支持。其最后的目的便是可以成为使企业的开发者大范围减少投放到市场中所需时间的体系构造。
2.1.2 JSP的概念及其特点
JSP程序是一个服务端的页面脚本程序,是英文Java Server Pages的简写,翻译成中文就是java服务器页面,简单的来说JSP就是简易的Servlet设计,能够在该脚本里直接对客户端浏览器进行编写所须要显示的HTML的文档内容,当然也可以按照JSP规范将Java程序代码嵌入到脚本中。JSP脚本规范为简化JSP程序和浏览器之间的输入输出处理提供了若干内部对象。因为是从HTML页面中增加Java动态处理代码从而得到JSP程序,所以又被称为动态JSP页面。
2.1.3 Java Bean的概念
JavaBean是一种可反复使用的组件,它由JAVA语言写成的,用户可以通过JavaBean打包所有功能、处理、值、数据库访问以及所有能够用java代码创造的对象,而且能够被别的开发人员可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来运用这些对象。一定程度上认为JavaBean为用户准备了一种随时随地都可以拷贝的能力,而不需要考虑意外的发生。这对于J2EE业务逻辑层处理是具有非常重要作用的地方。
2.1.4 Java Servlet的概念
Java Servlet用的是某种请求/响应的机制,即是说使用设定的Java程序设计的技术,通过该Servlet动态产生响应从而向一个特定的请求做出相应的响应。Servlet能应用的请求/响应场合有很多,但是经常使用的仍是于Web应用程序中用来产生超文本传输协议响应(HTTP)。由此,Servlet可以代替别的类型HTTP请求/响应机制,比如通用网关接口(CGI)脚本。
2.1.5 Session对象
Session对象是类javax.servlet.Httpsession中的对象,它用来存储全部用户的信息(通过会话的方式存储到WEB服务器端),从而来追踪全部使用者的操作状况。
2.2 J2EE的结构
J2EE结构具有与平台无关性的J2EE结构。因此通过J2EE设计出的程序就可以在不同平台的操作系统下来使用。因为该特点就令编写J2EE程序变成一件简单的事情,由于将业务逻辑封装成了能够被用来复用的部件,而且J2EE服务器通过容器的形式为每一种组件类型来提供后台服务,因此你可以集中注意力来解决业务逻辑。
2.3 J2EE的容器类型
J2EE容器类型可以分为两种:WEB容器,EJB容器。
EJB容器可以处理所有J2EE应用程序里企业级Bean的执行,Enterprise Bean以及它们的容器在J2EE服务器之上运行的。
WEB容器也是管理一切J2EE应用程序中JSP和Servlet组件的执行,与此相同的 WEB组件和它们的容器也是在J2EE服务器上运行的。
2.4 J2EE的体系与模式
2.4.1 J2EE的体系(分布式计算)
(1)表示层:Web Page| HTML | HTTP
(2)控制层:JSP | Servlets
(3)逻辑层:JavaBean
(4)数据层:Database
(5)JDBC
2.4.2 J2EE的模式
MVC(Model – View – Controller)
页面bean是模型(model),而JSP是视图(view), Servlet是控制器(controller)。
2.5 JAVA三大框架
Java三大框架主要用来做WEN应用。
Struts主要负责表示层的显示
Spring通过操纵它的IOC和AOP来处理控制业务(负责对数据库的操作)
Hibernate主要是数据持久化到数据库
再用jsp的servlet做网页开发的时候有个 web.xml的映射文件,里面有一个mapping的标签就是用来做文件映射的。当你在浏览器上输入URL得知的时候,文件就会根据你写的名称对应到一 个JAVA文件,根据java文件里编写的内容显示在浏览器上,就是一个网页。
2.5.1 Struts框架
struts是开源软件。为了能够使我们降低在使用MVC设计模型来开发Web应用所用的的时长,所以我们使用struts。若是想同时使用Servlets和JSP的优势来创建可扩张的应用,选用struts也是很好的。
1.流程:服务器启动后,根据web.xml加载ActionServlet读取struts-config.xml文件内容到内存。
2.架构:Struts对Model,View和Controller都提供了对应的组件。ActionServlet,该类是Struts的核心控制器,用来阻拦用户发出的请求信息。
Model部分:由JavaBean组 成,ActionForm对用户的请求参数进行封装,从而成为ActionForm对象,该对象被ActionServlet转发给 Action,Action按照ActionFrom中的请求参数对用户的请求进行处理。JavaBean则封装了底层的业务逻辑,包括数据库访问等。View部分:该部分采用JSP实现。大量的标签库有Struts提供,减少脚本的使用可以运用标签库来减少,自定义的标签库能够实现与Model的有效交互,并增添了现实功能。对应上图的JSP部分。
Controller组件:系统核心控制器,业务逻辑控制器两个部分组成了Controller组件。系统核心控制器,对应上面的ActionServlet。Struts框架提供了该控制器,继承HttpServlet 类,所以能够配置成标注的Servlet。该控制器用来阻截每一个HTTP请求,之后按照用户的相关请求确定是否要交给业务逻辑控制器。业务逻辑控制器,用于处理用户的请求,该控制器本来没有处理的功能,它通过使用Model来完成该功能。对应Action部分。
2.5.2 Spring框架
Spring是一个处理了大量的在J2EE开发中常见错误的非常优秀的框架。 Spring供给了管理业务对象的同步方法而且鼓励了注入对接口编程而不是对类变成的好习惯。Spring的架构基础是基于使用JavaBean属性 的Inversion of Control 容器。然而Spring在运用IoC容器作为建立完好关注全部架构层层的完全解决方案方面是唯一的。Spring提供了独一的数据管理 抽象包括简易和高效能的JDBC框架,很大程度上提高了效能而且降低了一定数量的漏洞。Spring的数据访问架构还集成了Hibernate和其他O/R mapping 解决方案。
2.5.3 Hibernate框架
Hibernate是一个开源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装,使得Java程序员可以更为随意的使用对象变成思维来操作数据库。Hebernate能够运用在所有应用JDBC的地方,既能够在java的 客户端程序用,也可以在Servlet/JSP的Web应用中来进行运用,最最具有重大意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP, 完成数据持久化的重要任务。
Hibernate的核心接口一共有5个,分别为:Session、 SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口, 不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。
1.Session接口:负责执行被持久化对象的CRUD操作(CRUD的任务是完成与 数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于 JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将 HttpSession对象称为用户session。
2.SessionFactory接口:负责初始化Hibernate。它充当数据存储 源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常 只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
3.Configuration接口:负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,之后创建SessionFactory对象。
4.Transaction接口:负责事务相关的操作。该接口是可以被选择的,开发人员也可以设计编写个人的底层事务处理代码。
5.Query和Criteria接口:负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表现方法。
2.6 开发环境的搭建
2.6.1 服务器配置
第一步:首先从官方网站http;//
http://java.sun.com下载该软件的最新版本。
第二步:双击.exe文件,安装在C:/Program Files/Java/ jdk1.7.0_79。
第三步:JDK的环境配置:在桌面上用鼠标选中我的电脑,单击右键,点击属性按钮,然后在“系统特性”一栏内点击“高级”标签,之后 “高级”里面选择“环境变量”,在系统变量中加入变量JAVA_HOME(C:/ProgramFiles/Java/ jdk1.7.0_79),classpath(变量值为C:/Program Files/Java/ jdk1.7.0_79/lib/dt.jar;C:/ProgramFiles/Java/ jdk1.7.0_79/lib/tools.jar;C:/ProgramFiles/Java/ jdk1.7.0_79)和path(变量值为C:/Program Files/Java/ jdk1.7.0_79/bin;)。
完成前面的所有步骤之后,输入javac,如果出现图中的画面,就表明JDK安装以及配置都是对的。
图1 javac调试界面
2.6.2 Tomcat安装及配置
打开并运行apache-tomcat-7.0.32.exe文件,依据普通的程序安装步骤一步一步就可以轻松安装好Tomcat,安装时它会自动查找到JDK所在的位置。在安装的过程中必须要选择某个文件夹从而作为Tomcat的安装目录。我选择安装的位置是C:/ Tomcat 7.0。
完成安装之后,增加Tomcat的环境变量,增加的方法与JDK的环境变量的添加方法类似,设置变量名为TOMCAT_HOME,变量值为C:/ Tomcat 7.0。
设置完毕后就可以运行Tomcat服务器了。Tomcat成功启动后,在浏览器中输入http;//localhost;8080/,如果出现欢迎界面,则说明Tomcat安装成功。
2.6.3 数据库配置
(1)SQL Server
首先,要定义一个数据库名称(DSN)。打开“开始”按钮然后“设置”然后“控制面板”|“管理工具“,之后在文件夹下有ODBC数据源的快捷方式。
在弹出的“ODBC数据源管理器”的窗口中选择“系统DSN”,之后点击“添加”选项,选择“SQL Server”为数据库驱动程序,点击“完成”。如图2所示。
图2 创建新数据源
在弹出的“创建SQL Server的新数据源”对话框的“数据源名称”文本框输入“douxing”,在“描述”文本框中可以写上数据库的功能。在“服务器”下拉列表中选择要连接的SQL Server,因为要安装到本地服务器,因此点击 “XY”即可。如图3所示。
图3 选择数据库服务器
选择 “下一步”按钮,点击“使用用户输入登录ID和密码的SQL Server验证”单选按
钮,“登录ID”默认为“admin”,密码为空。如图4所示。
图4 SQL Server身份验证设置
选择“下一步”按钮,在该页面中选择该数据库的数据库为“毕业设计”,如图5所示。
图5 选择SQL数据库
点击“下一步”按钮,再点击“完成”按钮即可打开“ODBC Microsoft SQL Server 安装”对话框。如图6所示。
图6 测试数据源
第3章 需求分析和可行性研究
需求分析通俗的来说就是对一般用户的需求进行分析处理,通过充分了解用户需求进而把目标系统大致架构出来。需求分析第一要务就是对实际要处理的对象进行全面的调查,要对所调查目标的对象进行充分的了解,了解之后才能真正确定下来用户所需要的也切合实际情况的系统,最终才能根据该情况确定系统所应该拥有的各种功能。本次设计的网上拍卖系统亦是如此。
3.1 问题的定义
问题定义是指从系统的方向来认识了解软件,确定对所开发系统的全部要求,并指出要实现这些需求所需要的条件,需求需要达到怎样的标准.这些需求是指:环境需求(如jdk、服务器等)、功能需求(要做什么),性能需求(要达到什么指标),可靠性需求(避免发生故障的能力), 用户界面需求,安全保密的需求,资源使用需求(软件运行是所需的内存,CPU等),软件资源损耗与开发进度需求,提前预计之后系统可以达成的目标。
因此在进行项目开发之前,通过大量查询资料,我对网上拍卖系统进行了系统的研究,确定了开发该系统所需的环境需求,为充分满足用户需求所设计的多功能个性化的界面,为商户设计的多样化的商品陈列界面,并对日后项目开发所需时间进行预估,保证在验收项目之前提早完成该系统。
3.2 需求分析
3.2.1 需求分析的过程
进行需求分析需要分为三个方面:分析与综合,制订规格说明,评审。
分析与综合:一步一步将所有软件功能进行细化,找出系统元素间的相互联系,接口特性以及设计上的各种限制,判断他们是否满足需求,去掉不合理的部分,添加需要的部分。最后,整理成为系统的解决方案,以及将要开发的系统的详细逻辑模型(做什么的模型)。
制订规格说明书:也就是编制文档,软件需求规格说明书就是描述需求的文档。注意需求规格说明书是需求分析阶段的成果,然后向下一阶段提交。
评审:对功能的正确性,完整性和清晰性,以及其它方面的需求进行评价。评审通过才能进行下一个阶段的工作,不通过则需重新开始需求分析。
3.2.2 需求分析的方法
有很多进行需求分析的方法。现在我们只讨论原型化方法
, 对结构化方法,动态分析法等别的的方法在此不进行分析。
在需求分析的种种方法中原型化方法是非常重要的一种方法。原型的含义就是软件的早期可运行的某个版本,该版本实现了目标系统的一些甚至全部的功能。
原型化方法就是为了缩短时间先建立一个相对不那么完善的简单系统,这样的的一个系统具有一些目标系统的某些或者所有的功能,但是因为比较粗糙在可靠性,界面友好性以及等等方面并不完全具备,有许多功能的短缺和缺点。我们建立这样的一个系统可以发现目标系统的某一方面是否真正可行,比如算法的可行性,是否拥有相关技术,是否满足用户真正的需求。举个例子来说,在研究是否满足客户真正需求的时候,可以快速建立一个简易的系统,该系统只有一个借口,通过用户实地操作后进行反馈,从而得到这方面的信息,继而基于原型系统进行目标系统的开发。
有三种主要类型的原型:探索性,实验性,进化性,探索性:目标是确定目标系统的要求,确定可取的功能,并探讨多种方案的可行性。实验型:目的在于在大范围的开发和实现前,考核方案是否真的合适,规格说明是否真的可靠。进化型:它的目的不在于改进规格说明,而是在于将系统建造得更易于变化,在不断改进软件原型的过程中,一步一步将原型升级成为最终版本系统。
运用两种不同的策略来进行原型化方法:废弃策略,追加策略。废弃策略是指先创建一个功能相对简单并且质量要求低的模型系统,然后对这个系统进行反复的修改,形成比较好的思想之后,由此设计出较为完善,精确,一致,稳固的最终系统。系统构造完成后,原来的模型系统就被废弃不再使用.探索型以及实验型都属于废弃策略。
追加策略是指先建构一个功能不太复杂并且对质量的要求低的模型系统,作为最终要完成的系统的核心,进而通过不断地进行扩充与修改,渐次追加新的要求,继而发展成为最终的系统。进化型属于这种策略。
3.2.3 本软件研究方法
软件工程顾名思义,就是求解软件的一类工程,它运用计算机科学、数学和管理科学的原理,运用传统工程的原理和方法,建立软件,以提高质量,降低成本。在软件工程中,构造模型与算法通过计算机科学、数学来构造,而工程科学则用于制定规范、设计范型、评估成本以及确定权衡,管理科学则是用于对计划、资源、质量、成本等的管理。软件工程是一个工程类学科,对计算机软件的开发以及维护起到了指导作用。
软件工程的模型是一个结构框架,包含了软件开发全部的过程、活动和任务。
瀑布模型的内容及其特点:
瀑布模型把软件生存周期中的各种活动规定为按照固有的顺序进行连接的软干阶段工作,是一种线性的模型。瀑布模型的各阶段的活动是:指出系统相关需求、指出软件相关需求、需求的分析、设计、编码、测试以及运行。各个开发的阶段具有以下的几项特征,将上一阶段接受本阶段的工作对象作为输入,对于上述输入从而进行本阶段的活动,将本阶段的工作成果作为输出传递到下一个阶段,评审该阶段的工作,如果该阶段工作被确认后,就开始进行下阶段的工作,不然的话返回前一阶段甚至更前面的某个阶段。瀑布模型有种种缺点但它最大的缺陷就是这个模型严重缺乏灵活性。
演化模型的内容及其特点:
部分软件开发不能够事先完整的定义相关的软件需求,这时候就需要用到演化模型,演化模型的开发过程通常是一开始的时候对核心系统进行开发,在投入运行核心系统之后,软件开发人员依据用户的返回的相关信息,实施进行开发的迭代过程,每进行一次迭代的过程均要进行需求、设计、编码、测试、集成等几个阶段,迭代过程进行到整个软件开发的结束。演化模型能够在部分程度上降低了软件开发活动的盲目性。
螺旋模型的相关内容及其特点:
这个模型是在瀑布模型以及演化模型的基础上出现的模型,但它是增加了这两个模型之前所没有的风险分析阶段从而在此基础上出现的一种新型的软件开发的模型。螺旋模型沿着顺时针的方向,渐次体现了以下几个方面的活动:制定计划、风险分析、实施工程以及客户评估。
喷泉模型的相关内容及其特点:
软件创建所固有的迭代和无间隙特征在喷泉模型上得到了体现,部分软件开发过程需要面向对象开发,这时候就需要使用喷泉模型。
增量模型的相关内容及其特点:
在完成了软件系统完整的体系结构的设计之后,开始完整的开发系统的一个初始子集,继之,根据这一子集,建造一个更加精细的版本,如此不断的进行系统的增量开发。
瀑布模型、演化模型、螺旋模型之间的联系:这三者的相似的地方就是它们都可以分为多个阶段进行软件开发,而瀑布模型一次完成软件,演化模型分为多次完成,每次迭代完成软件的一个部分,螺旋模型也分为多次完成,每次完成软件的一个新原型,并考虑风险分析。
3.2.4 目标需求
本项目主要实现的功能是为为广大的消费者群体与商家之间提供网络交易的平台,实现该平台的创建需要实现一系列的功能。商品信息发布的功能,商家发布自己产品的相关信息;注册登录功能,游客通过注册成为用户后可以正式开始购物收藏等操作;商品购买功能,将商品加购物车后继而填写相关信息进行购买;秒杀功能,商家推出低价产品来进行推广或清仓,用户购买廉价商品;竞拍功能,稀有产品通过竞拍价高者得;后台管理功能,通过后台管理对商品的增添,活动的开始关闭进行操作。
首先进行总体的分析和设计,再将基本信息模块的具体内容设计完成,然后完成其它各个子模块的功能。并要重视作好笔记。本项目采用MySql进行数据库设计,开发工具采用eclipse。
3.2.5 功能需求
3.2.5.1 系统用例
3.2.5.2 登录注册
3.2.6 性能需求
(1)磁盘容量要求:存储容量不大,数据库系统也比较小,系统容量约占30MB空间左右;
(2)安全性要求:有权限的相关设置,未注册登录的游客不能进行用户权限的操作,如加入收藏夹,购买等操作。普通用户不能进行商品上架,开放商品秒杀竞拍等功能,只有商家可以;
(3)适应性要求:要求界面美观简介,方便用户熟悉操作,方面商品的管理上架、下架、购买、参与竞拍等操作。
3.3 可行性分析
进行可行性分析就是为了能够运用某个具体的项目中它的最重要的内容以及与其对应的需求,继而从不同的方向进行分析解决,然后看问题是不是确实可以被处理,就是说在最小的付出的情况下尽最大的可能来保证问题得到处理,尽力减少人力物力的过量付出,导致事倍功半。进行可行性分析须要集思广益,对尽可能多的解决方法进行调查研究,对这些方法可能招致的结果进行筛选,看结果所取得的成果效益是否影响一开始的目标。进行可行性分析一定要科学、可靠、公正。我们可以从四个方面来进行可行性分析。
3.3.1 经济可行性
基于B2C网上拍卖系统的开发,通过从不同渠道大范围的查询相关的资料以及在通过问卷形式和对得来的资料进行独立的分析与思考之后,最终确定网络商城系统在经济上是可以实行的。接下来我从投入和效益这两方面来对其进行分析。
作为独立设计的系统,不需要人力资源的投入,而且仅凭一台电脑搭建相关环境就可以完成,而且项目开发中用到的开发工具Eclipse 、服务器Tomcat、 数据库MySql都是免费的开源的,投入很少,开发完成后没有盈利目的,因而可以进行开发。
3.3.2 技术可行性
因为有以往在学校的软件开发得相关经验再加上对该系统所需技术以及设计相关功能进行了详尽的调查和思考,决定使用JSP来进行该项目的开发, 而JSP是一种以JAVA语言为主的能在不同平台不同的环境中都可以进行部署和开发的语言,而这正是该系统所需要的,所以在技术上本系统是可行的。
3.3.3 操作可行性
基于B2C网上拍卖系统具备多样化、个性化、多功能的界面,为用户和商家广泛接受,而且具备竞价和秒杀等具有特色的功能,操作简单,安全性高,便于维护,所以从使用操作方面的角度来讲,该系统是值得开发的。
3.3.4 法律可行性
作为我个人的毕业设计,该系统完全由我一人开发,因此在开发过程不需要与外界以及其他单位个人有所冲突,完全符合法律的相关规定。因此,本系统在法律上是可行的。
通过从以上的四点进行详尽的可行性分析之后,确定开发一个基于B2C的网上拍卖系统是可以完全可行的。
第4章 系统总体设计
本数据库使用的是Mysql,MySQL是关系型数据库管理系统,是由瑞典MySQL AB公司所开发的,目前属于的是Oracle公司。Mysql是现如今最风行的关系型的数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System)应用软件之一。MySQL是关联数据库管理系统,关联数据库在不同的表中保存数据,而不是在一个大仓库将所有数据放入内,这样就提高了速度并且提高了数据的灵活性。作为经常被人们使用的用来访问数据库的标准化语言SQL语言在MySQL中得到应用,为了方便不同人群,MySQL采用了两种版本,分别是社区版和商业版,而且由于MySQL软件的种种优点,如占用空间小、运行速度快等特点,尤其是它的开放源码的这一优势,得到了大量中小型网站开发者的青睐,数据库都采用MySQL。
Mysql具有以下特性:
1.使用C与C++语言编写,而且多种的编译器对其进行了测试,确保了源代码的可移植性。
2.得到 Windows、FreeBSD、AIX、HP-UX、NovellNetware、Linux、SolarisMac 、OS、OpenBSD、OS/2 Wrap等多种操作系统的支持。
3.为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
4.充分的利用了CPU资源,支持多线程。
5.经过改良的SQL查询算法,大大的提升了查询的速率。
6.不仅可以当作独立的应用程序来使用在客户端服务器网络环境中,而且可以当作库来嵌入到别的软件中。
7.满足多种语言的支持,常用的编码譬如中文的BIG5、GB 2312,日文的Shift_JIS都能够被用作数据表名、数据列名。
8.提供了很多的数据库连接途径,譬如TCP/IP、ODBC和JDBC等。
9.提供了管理工具用于检查、管理、优化数据库的操作。
10.Mysql可以满足大型的数据库需求,能够用于解决包含大量的内容的大型数据库。
11.支持多种存储引擎。
12.是开源的数据库,你不需要支付其它的费用。
13.使用的数据语言形式是标准的SQL数据语言形式。
14.很好的支持目前最流行的Web开发语言—PHP。
15.是可以定制的数据库,Mysql采用了GPL协议,可以通过修改源码来开发私人的Mysql系统。
4.1 系统需求
4.1.1 系统需求描述
该项目研究的是基于B2C的网上拍卖系统,帮助人们应用互联网很买到自己所中意的商品,并参与到秒杀与竞拍当中。
4.1.2 软件结构
本软件结构采用的是dao---service---action的分层结构,期中 dao层包括的主要是一些对数据库操作的接口及实现; action层通过实现调用业务逻辑方法从而来处理用户请求;service层是实现一些业务逻辑,业务逻辑实现也是使用dao层提供的对数据库操作的接口和实现。三者互相调用, dao中的方法被service调用,service的方法被action调用,如3-1-1图和3-1-2图所示:
图3-1-1
图3-1-2
4.2 系统功能
(1)普通用户登录功能。
(2)普通用户注销功能。
(3)分类查看商品功能。
(4)查看商品详细功能。
(5)秒杀功能。
(6)竞拍功能。
(7)购物车功能。
(8)用户注册信息功能。
(9)购买功能。
(10)修改用户信息功能。
(11)添加用户留言,删除用户留言,查看用户留言。
(12)管理员登录验证功能。
(13)管理员注销功能。
第5章 系统设计与实现
5.1 系统数据库设计
5.1.1 系统E-R图
图1-1 系统E-R图
5.1.2 数据库表设计
5.1.2.1 用户表use
作为一个网上拍卖系统,首先客户是第一位,那么为了更方便客户管理,以及对用户信息的采集,我们对创建用户信息表,包括6个字段,分别是用户名,密码、性别、邮箱以及登录账号和密码如表1-2-1所示:
表1-2-1 用户表
列名 | 中文名称 | 数据类型 | 长度 | 允许空 |
---|
Username | 用户名 | varchar | 50 | null |
Password | 用户密码 | varchar | 50 | null |
Sex | 性别 | Int | 50 | null |
Email | 邮箱 | varchar | 50 | null |
Admin | 是否管理员 | Int | 50 | null |
Id | 序号 | Int | | PK |
5.1.2.2 商品表product
第二张表也就是我们的商品信息表,包括商品的序号、名称、价格、图片等,如表1-2-2所示
表1-2-2 商品表信息
列名 | 中文名称 | 数据类型 | 长度 | 允许空 |
---|
Id | 序号 | Int | 50 | PK |
Name | 商品名 | varchar | 50 | null |
Img | 商品图片 | varchar | 50 | null |
Content | 商品简介 | varchar | 50 | null |
Price | 价格 | varchar | 50 | null |
Sfcx | 是否促销 | Int | 2 | null |
Newprice | 促销价格 | varchar | 50 | null |
Sfms | 是否秒杀 | int | 2 | null |
Msprice | 秒杀价格 | varchar | 50 | null |
Msdate | 秒杀开始时间 | varchar | 50 | null |
Mscount | 秒杀数量 | int | 5 | null |
Sfjp | 是否竞拍 | int | 2 | null |
Qpprice | 起拍价 | varchar | 50 | null |
Jpprice | 竞拍价 | varchar | 50 | null |
Jpperson | 竞拍人 | int | 2 | null |
Jpdate | 竞拍结束时间 | varchar | 50 | null |
5.1.2.3 订单表order
订单表order是商城与客户交互后的产物,包括商品序号、商品名、价格、以及派送方式和联系方式等如表1-2-3所示
表1-2-3 订单信息表
列名 | 中文名称 | 数据类型 | 长度 | 允许空 |
---|
Id | 序号 | Int | 10 | PK |
Proid | 商品序号 | Int | 2 | null |
Count | 购买数量 | varchar | 50 | null |
singleprice | 单价 | varchar | 50 | null |
Price | 价格 | varchar | 50 | null |
Userid | 购买者序号 | int | 2 | null |
Sffk | 是否付款 | int | 2 | null |
Tel | 电话 | varchar | 50 | null |
address | 地址 | varchar | 50 | null |
Date | 购买日期 | varchar | 50 | null |
senddept | 送货地址 | varchar | 50 | null |
visible | 是否可见 | int | 2 | null |
5.1.2.4 留言信息表message
留言信息表也是购买商城必不可少的,不仅有利于客户了解商家信誉度,同时还能更好地了解商品,使商城拍卖更透明,留言信息表包括客户的用户名,邮箱,以及留言内容和留言序号,如表1-2-4所示:
表1-2-4留言信息表
列名 | 中文名称 | 数据类型 | 长度 | 允许空 |
---|
Name | 用户名 | varchar | 50 | null |
Email | 邮箱 | varchar | 50 | null |
message | 留言内容 | varchar | 250 | null |
Id | 留言序号 | int | 4 | PK |
5.2 前台页面管理
打开chrome浏览器,在浏览器输入url:http://localhost/sale/index/toindex;跳转到商城首页,商品首页将为您展示上市的新品以及在促销中的商品,然后游客可以查看商品详细信息,如果想要购买商品,则需要登录用户名和密码,若没有注册,则需要进行注册。该系统首页如图5-1所示:
图5-1
5.2.1 注册与登录
游客无法进行商品的交易,如果想要进行商品交易,我们需要进行登录,那么点击右上角的,跳转到登录注册页面,登录注册界面则可供消费者进行登录或者注册,登陆需要提交正确的已注册过的用户名以及密码,如果之前从未进行注册,那么首次操作请点击继续按钮,进行注册,注册时需要用户名、密码以及邮箱,然后选择注册,则注册成功,返回登陆界面。如果已经注册,则直接登陆,登陆后页面跳转到首页,用户由此页面开始挑选心仪的产品开始购物,如图5-2-1所示:
图5-2-1
5.2.1.1 注册
点击继续,跳转到如下图4-1-2界面所示:
图5-2-2
后台代码:
public View register(HttpServletRequest request){
String username=request.getParameter("username");
String password=request.getParameter("password");
String email=request.getParameter("email");
User user =
new User();
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
user = userService.addUser(user);
输入相应的用户名、密码和邮箱,点击注册,提示注册成功,完成注册。
5.2.1.2 登录
输入用户名密码,点击登录,提示登录成功,完成登录。登录后如图5-1-3所示:
图5-2-3
后台代码:
public View login(HttpServletRequest request){
String username = request.getParameter("username");
String password = request.getParameter("password");
List<User> list = userService.findUserByNameAndPsd(username, password);
//新品上市
List<Product> newlist = productService.findNewProduct();
request.setAttribute("newlist", newlist);
//促销
List<Product> cxlist = productService.findCxProduct();
request.setAttribute("cxlist", cxlist);
5.2.2 选择物品加入购物车
5.2.2.1 普通商品与促销商品
每一个商品由商品图片、商品名称、商品介绍、以及价格组成,全方面介绍商品的各个属性。点击商品下方的加入购物车,即可将商品加入购物车,也可以点击收藏按钮将商品加入个人的收藏夹,方便日后进行购买。
5.2.2.2 秒杀商品
点击,进入秒杀列表,如图5-2-4所示:
图5-2-4
选择要秒杀的商品,查看秒杀商品详细,秒杀商品除商品的基本属性外还包括商品的原价格和秒杀价格以及秒杀时间,如图5-2-5、5-2-6以及5-2-7所示:
图5-2-5(未到秒杀时间的商品)
图5-2-6(正在秒杀的商品)
图5-2-7(秒杀结束的商品)
选择正在秒杀的产品,点击加入购物车,并付款成功,完成秒杀。
5.2.2.3 竞拍商品
进入竞拍商品详细,如图5-2-8与5-2-9所示:
图5-2-8(竞拍中的商品)
图5-2-9(竞拍结束的商品)
输入加价,点击确定,完成竞拍,每一次加价都将刷新页面上商品的价格,竞拍结束后,商品将自动加入出价最高者的购物车内。
竞拍后台代码:
public View addprice(HttpServletRequest request)
5.2.2.4 购物车、订单和结算
用户登录后,可查看购物车和订单。
点击我的购物车,进入购物车界面,如图5-2-10所示:
图5-2-10
点击结算,跳转到填写收货信息界面,如图5-2-11所示:
图5-2-11
填写用户的电话收货地址以及选择快递公司之后后点击确定,出现如下图5-2-12界面:
图5-2-12
选择银行后点击确定,提示支付成功。
点击我的订单,查看已购物品,如图5-2-13所示
图5-2-13
5.3 后台管理
在浏览器输入url: http://localhost:8080/sale/index/toAdmin;跳转到后代登录页,如图5-3所示:
图5-3
后台管理员默认账号admin,密码111111
输入用户名和密码,点击登录,进入后台系统。如图5-3-1所以:
图5-3-1
5.3.1 修改密码
点击修改密码,依次输入原密码、新密码、重复密码,点击确定,提示修改成功。如图5-3-2所示:
图5-3-2
后台代码:
public View changePsd(HttpServletRequest request){
User user = (User)request.getSession().getAttribute("user");
5.3.2 商品管理
5.3.2.1 商品维护
点击商品管理,展示商品列表,如图5-3-3所示:
图5-3-3
后台代码:
public View list(HttpServletRequest request){
点击左上角添加,跳转到商品添加页面,如图5-3-4:
图5-3-4
输入商品名称、商品价格、简介并上传商品图片后,点击提交,提示保存成功;商品添加完成。
后台代码:
public View add(HttpServletRequest request,@Param("file")TempFile file,
@Param("name")String name,
@Param("price")String price,
@Param("content")String content)
throws IOException{
修改操作:点击操作栏修改,跳转到修改商品信息,填写相应信息后,点击提交,提示修改成功。
后台代码:
public View update(HttpServletRequest request,@Param("file")TempFile file,
@Param("name")String name,
@Param("price")String price,
@Param("content")String content,
@Param("id")String id)
throws IOException{
设置促销:点击操作栏设置促销,填写促销价格,点击提交,提示修改成功,设置促销成功。
后台代码:
public View szcx(HttpServletRequest request){
String id = request.getParameter("id");
String newprice = request.getParameter("newprice");
Product product = productService.findProductById(Integer.
parseInt(id));
product.setNewprice(newprice);
product.setSfcx(1);
取消促销:点击操作栏取消促销,提示修改成功,取消已促销的商品。
后台代码:
public View qxcx(HttpServletRequest request){
String id = request.getParameter("id");
Product product = productService.findProductById(Integer.
parseInt(id));
product.setSfcx(0);
product.setNewprice(
null);
删除商品:点击操作栏删除,提示删除成功,删除商品。
后代代码:
public View delete(HttpServletRequest request){
5.3.2.2 秒杀管理
点击秒杀商品节点,跳转到秒杀商品页面如图5-3-5:
图5-3-5
列表中有可供设置秒杀的商品列表,点击操作栏设置秒杀,跳转到设置秒杀界面:
如图5-3-6所示:
图5-3-6
添加秒杀价格、秒杀数量和秒杀时间后,点击提交,设置秒杀完成;
后台代码:
public View szms(HttpServletRequest request){
String id = request.getParameter("id");
Product product = productService.findProductById(Integer.
parseInt(id));
String price = request.getParameter("price");
String count = request.getParameter("count");
String time = request.getParameter("time");
取消秒杀:点击操作栏取消秒杀,提示修改成功,取消该商品的秒杀;
后台代码:
public View qxms(HttpServletRequest request){
String id = request.getParameter("id");
Product product = productService.findProductById(Integer.
parseInt(id));
product.setSfms(0);
product.setNewprice(
null);
product.setMscount(0);
product.setMsprice(
null);
product.setMsdate(
null);
当秒杀商品数量为0时,秒杀结束。
5.3.2.3 竞拍商品
点击竞拍商品节点,跳转到竞拍商品页面,如图5-3-7所示:
图5-3-7
设置竞拍:点击操作栏设置竞拍,跳转到设置竞拍页面,如图5-3-8所示:
图5-3-8
填写起拍价、竞拍结束时间,点击提交,提示修改成功。
后台代码:
public View szjp(HttpServletRequest request){
String id = request.getParameter("id");
Product product = productService.findProductById(Integer.
parseInt(id));
String price = request.getParameter("price");
String time = request.getParameter("time");
product.setSfjp(1);
product.setJpprice(price);
product.setJpdate(time);
取消竞拍:点击操作栏取消竞拍,提示修改成功,取消竞拍。
后台代码:
public View qxjp(HttpServletRequest request){
String id = request.getParameter("id");
Product product = productService.findProductById(Integer.
parseInt(id));
product.setSfjp(0);
product.setQpprice(
null);
product.setJpdate(
null);
product.setJpprice(
null);
5.3.3 订单管理
点击订单节点,查看用户用购买商品订单,订单只提供查看功能如图5-2-9:
图5-3-9
5.3.4 留言管理
点击留言管理节点,查看留言管理,如图5-3-10:
图5-3-10
留言删除:点击删除,提示留言删除成功。
后台代码:
public View delete(HttpServletRequest request){
String id = request.getParameter("id");
第6章 系统测试与分析
6.1 程序调试
在整个程序开发的过程中,一定会存在一些错误。当程序运行时出现语句的语法错误时,会有自动提示,会得到及时的纠正,所以这类错误更简单的得到发现和纠正。然而在程序执行的过程中,由于错误的操作或者对一些数据计算公式的逻辑错误从而导致错误的结果。这一类错误很难被发现,时而出现,又时而不出现,所以,对于这些动态发生的错误进行排查的过程是十分的耗时费力的。
6.2 程序的测试
网站测试是软件设计的最后一道工序,也是非常重要的一步。用于检查软件的质量、性能、可靠性等是否符合用户需求。一套严谨的、规范的、完善的测试过程将大大提高软件的质量、可信度、可靠性,降低软件的出错率,降低用户风险系数。通常网站测试包括:功能测试,安全测试,可用性测试,性能测试、兼容性测试等方面。
6.2.1 测试的重要性及目的
(1)测试的重要性
在软件生命周期中对软件的测试是非常重要的一个部分,在过去常使用的瀑布模型中,在运行维护阶段之前才会使用到软件测试学,软件产品交付用户使用之前进行软件测试是保证软件质量的一项非常重要手段。近年来,为了检验本阶段的工作成果能否接近预期的目标,使尽早的发现错误并加以修改更正,软件工程界开始倾向于一种新的观念,即软件生命周期中的各个阶段里都需要进行测试,倘若没能在前期阶段就开始测试,错误的在后面阶段的扩散往往会致使最后成品测试的更大问题。
然而在实际情况中,某种程度上对于软件来讲,不管使用怎样的技术和采用怎样的方法,在软件中仍旧会出现错误。为了减少错误的引入我们通常会使用新的语言、更完善的开发过程、更先进的开发方式,然而仍旧不可能完全避免软件中的错误,所以这些引入的错误需要通过测试来找出,需要测试来对软件中错误的密度进行估计。一切工程学科的基础组成单元都是测试,测试是软件开发中的重要组成。自从程序设计存在的那天起就与测试密不可分。据有关统计表明,在一般软件开发项目中,软件测试的工作量常常会超出软件开发所有工作量的40%。而且用在测试上的开销要占在软件开发的全部成本中的30%到50%。倘若把维护阶段的开销成本也考虑在内的话,测试的成本占整个软件生存期中的比例也许会相应降低,然而事实上维护工作几近于进行二次开发,甚至多次开发,必定许多测试工作还包含其中。
在实际操作中,人们往往因软件测试操作困难枯燥等原因而不愿从事相关工作,这其实是因为对测试工作存在着一些不正确的看法和理解的误区,包括以下几点:
1、觉得测试工作不像设计和编码工作那样易于取得显著的进展,无法给测试人员带
来一定的成就感;
2、以找到软件漏洞为目的而进行测试是不具有建设性的,乃至可能是破坏性的,测试中发现错位是对责任者工作的一种否定;
3、测试工作乏味枯燥,不能够使人感兴趣;
4、测试工作是很有难度而且关注细节的困难的工作;
5、对自己编写的程序代码无端自信,被找到错误后,担心他人对自己的编程能力的评价。
倘若拥有以上的想法对于从事软件测试工作是错误的,应该纠正自己的想法、拥有正确的观念,才有机会真正提高自己的动作水准,使产品真正的为用户接受。
(2)测试的目的
倘若测试是以为了更多地找出程序错误为目的的话,那么测试就应该直接针对程序以往出错比较多的地方或是代码比较复杂的部分。
1、软件测试的过程就是不断找到程序缺陷然后运行程序的过程;
2、测试不是为了证明程序无错误而是为了证明程序有错;
3、测试用例能发现至今未发现的错误就是一个好的测试用例;
4、能发现以往从来没有发现过的错误的测试就是一个成功的测试。
这些观点是为了告知人们进行测试时要以能够查找到错误为测试的中心,而不单单是为了操作软件的相关功能。然而如果只是凭字面意思理解这一观点的话测试人员可能会对测试产生一些误导,会认为测试的唯一目的就是为了查找错误,发现不了错误的测试就没有任何价值,然而事实并不是这样的。
查找漏洞并不是测试工作的唯一目的。测试人员可以通过分析错误的分布特征和错误产生的原因来帮助项目管理者尽快发现当前软件过程的缺陷,方便进行下一步的改进。而且我们通过这样的测试可以由此设计出对相关软件更有效便捷地检测方法,提高测试的性能。而且有价值的测试不一定非要找到程序的缺陷错误,能够完整的测试是一种评判测量好坏的方式。
6.2.2 测试的步骤
和软件开发的过程相类似,软件测试也必须分步骤有序进行,一步一步有序的进行,每一步都前后衔接。若干个模块组成一个个的子系统,再有一个个子系统组成大型的软件模块。所以倘若在大型软件系统上测试基本要进行以下几个步骤:
(1)在模块测试过程中发现的常常是在编码和详细设计方面的错误。
(2)在系统测试步骤中发现的常常是软件设计方面的错误,也有时会发现需求说明方面的错误。
(3)在验收测试的过程中经常发现的是系统需求说明书中的错误。
6.2.3 测试的主要内容
测试的过程分为5个阶段,即:代码审查、单元测试、集成测试、确认测试和系统测试。 通过这5个阶段性的测试来保证测试的高质量。
(1)单元测试
单元测试主要是对软件设计模块的最小单元进行检查,测试发现模块的实际功能和模块的功能定义不匹配的情况,以及编码错误
(2)集成测试
将把模块依据设计的需求组起来而且进行测试的叫做集成测试,能发现接口有关的问题。譬如两个模块有时会由于粗心的问题会造成有害问题;子功能拼装起来有时却不能出现目标的主功能;一些貌似可以被接受的误差却不能积累到受接受的程度;全程数据结构有时会出现错误等。
(3)确认测试
把向将来的用户证明系统会像预期工作为目的的测试叫做确认测试。通过集成测试按照之前的设计将全部模块拼装成完整的软件系统,也已经基本上排除了接口的错误,接下来应该再一步对软件的有效性进行验证,也就是确认测试任务,就如用户正所期待的那样的软件应有性能和功能。
(4)系统测试
最终在软件开发完成之后还是要与系统中其他部分进行相配套的运行,系统测试。包括性能测试、恢复测试、强度测试和安全测试等等。
对系统进行单独的测试主要从这样几个方面进行入手:
对功能进行测试,是对能否满足开发要求进行的测试,能否提供设计描述出的功
能和用户真正的需求都是否都得到了满足。该测试是最常使用和最需要进行的一项系统测试,通常情况下还会用正式的软件说明书作为测试的标准。
② 对强度测试以及对性能的测试,这是测试系统能力最高的实际限度,也就是软件在某些超过负荷的情况下功能实现的情况。
③ 对安全性的测试,这项测试是来证实位在系统内的对系统进行保护的保护机构的实用性,使其不受到各种干扰。主要是对权限系统测试和对无效的数据、错误的数据、以及不合法的数据进行干扰的能力而进行的测试。
通过以上的测试过程对该系统完整的测试过后,系统也基本上符合开发要求,全部测试完成。
系统中的不同组成模块经过设计完成以后,然后要对该系统进行进一步整个进行测试。这是为了让整个系统可以流畅、稳固、安全的进行运行。进行系统的测试的过程当中的以下九种情况:
(1)空指针会异常捕捉页面提交过来的数据。只要是发现无效的或者是空的值和数据都需要靠程序操作处理。
(2)第一时间对数据库连接和关闭异常进行捕捉。避免数据库连接资源及时的被释放,用来下一次的请求调用。
(3)捕捉数据库查询操作异常。
(4)捕捉数据库查询操作异常。
(5)捕捉数据库更新操作异常。
(6)捕捉数据库添加操作异常。
(7)捕捉数据库删除操作异常。
(8)用session会话变量来对用户以及管理员权限来进行操控。
(9)不一样的页面编码方式,对字符串进行需要的转码的操作。
6.2.3.1 客户端异常类结构图(如图6-2)
图6-2
6.2.3.2 服务端异常类结构图(如图6-2-1所示)
图6-2-1
第7章 安全性问题
安全性能是否良好是web开发中一定要密切关注的一个命题,特别是在这样的一个网络购物系统中安全性能的良好更为重要,在涉及到用户的个人信息的部分以及在交易中资金流动的过程中尤其需要特别注意,在安全性设计的这一模块需要投入更多的精力,这也是在后期的开发过程中需要重视的一个方面。现在针对安全性方面的解决方案以及技术进行研究,为解决安全性的问题有以下两点:
- 为阻止来自Internet 上对数据的攻击可以通过安装防火墙来屏蔽数据库端口来进行防护。
- 通过输入检查以及输出过滤从而防止用户在发送请求中嵌入恶意HTML标记来进行的攻击破坏,而且这类检查必须在服务器端进行,倘若校验代码发现有可疑的请求信息,就将那些可能错误代码替换并将其过滤掉。
结论
经过对本系统的设计以及开发,我得出了以下几点结论:
(1)掌握一项新的技能,最需要的是能够亲身亲历的实践,敢于动手操作才能真正学到实实在在的东西。
(2)在对一个系统进行开发的过程中能够不断增长经验,只有拥有足够的经验才会考虑周全,不断的完善一个项目从中汲取经验是一个你必须经历的一个过程。
(3)系统的界面直接影响了用户的体验以及用户对本系统的第一映像,好的系统界面应该是美观、有个性特色、有亲和力,并且满足用户对功能的需求,才能够吸引大量的用户群。在设计开过程中由于经验的缺乏,本项目的图形界面相对比较简单,但功能齐全使用便捷,在未来的学习中我会加强这一短板。
(4)在该项目的开发过程中,我通过大量的查询资料看过了大量类似该系统的项目,对那些优秀的系统有许多的借鉴之处,以弥补自己经验的不足,对完成整个项目的过程指明了方向,提供了巨大的帮助,在未来的学习中我会进一步的学习。
(5)新的技术核心的理念在不断的涌现,要不断的进行学习才能跟上时代的脚步,要有强烈的独立学习的愿望和行动,不断的充实自己,使自己的专业能力进一步的提高,专业知识更为丰富,并且不断运用到项目的开发过程中,才能开发出先进的系统。
经过实际操作和体验,我制作的网络商城系统有着非常好的未来前景,经过的完整的测试之后。我所制作的该系统系统界面美观、使用方便、功能齐全、操作简单、并且富有特色,可以算得上一个成熟的系统。
因为时间上的部分因素,能够一步一步完成一个完整的系统设计,对于一个我这样的新手来说一定还有许多模块制作的不够完美。数据库也设计的相对简单。有许多JSP的技术运用得不够熟练,许多代码设计的不够完美简练。但通过本次项目的设计,能够将在学校学习到的知识学以致用,并通过这样一个实践的机会将所有的知识交融在一起,对于我来说是一项挑战,但更是一个提高自己的机会,在这期间我实实在在的增长了经验,学到了许多。当然在这期间我也注意到了自己的许多短板,对JSP技术掌握得不够全面,导致在整个系统设计制作的过程中磕磕绊绊,一度进展缓慢,对界面的设计见解不够深刻,虽然通过借鉴与学习顺利完成但并不尽如人意,没能达到理想中的界面效果,这都是我接下来需要学习和弥补的方面。在整个项目的开发过程中,受到了许多老师同学的帮助,他们的帮助是我克服了许多期间的困难,是我深刻的认识到了团队的重要性。
同时由于经验不足,写代码时出现了一些考虑不周的系统缺陷,写代码的时候会出现与设想不一致,比如说代码不规范导致接口与接口之间出现问题,功能与客户的要求不符合,这样导致产品不能过关,无法交付。所以产品在上线前必须反复测试,经过反复测试,修改,再测试,再修改,产品才能够不断完善。在整个系统测试中,根据需求文档和设计文档,逐一对功能进行检测并写好测试用例,有效避免残片缺陷,因为产品出现缺陷不仅影响功能,而且可以导致数据的不准确,导致产品质量的降低,经过测试,才能使得产品的稳定性和成熟度得到极大的提升,产品质量也才有保证。
随着这篇论文的即将完成,也意味着我四年的大学生活也即将走向尾声,这次的毕业设计以及这篇论文,是大学学业顺利完成的一张通行证,也是我丰富的大学生活即将交出的最后的一张答卷,我相信着这是一张令人满意的答卷,是我未来走向社会的一个非常好的开端。
参考文献
[1]曹建.电子商务与网上经营[M].电子科技大学出版社,2003.
[2]耿祥义,张跃平.Java2实习教程[M] . 杭州:清华大学出版社, 2001.
[3]李刚.疯狂java讲义[M]. 杭州:电子工业出版社,
[4]王曰芬.电子商务网站设计与管理[M].杭州:杭州大学出版社,2002.
[5]陶国荣. jQuery权威指南[M]. 机械工业出版社, 2011.
[6]肖晖,张玉清. Nessus插件开发及实例[J]. 计算机工程, 2007,(02).
[7]刘晓华,张健,周慧贞.JSP应用开发详解[M].电子工业出版社,2007.
[8]Bob Reselman. Visual Basic 6.0 使用指南.电子工业出版社,2006.
[9]Craig Eddy. 中文Access 2000 24学时建设.机械工业出版社,2001.
[10]耿祥义,张跃平. JSP实用教程[M].杭州:清华大学出版社,2007.
[11]林金霖.ASP实物经典[M].杭州:中国铁道出版社,1999,12.
[12]美Walter Savitch Absolute java[M],杭州:电子工业出版社,2005.
[13]美Abrahan Silberschat, Henry F. Korth,S. Sudarshah. 数据库系统概念[M].机械工业出版社,2000.2
[14]Abraham Silberschatz.Database system Concepts (Fourth Edition) [M] .
Beijing:China Machine Press,2003.
致谢
本文是在的热情关心和指导下完成的,两位老师学识渊博、治学严谨,待人平易近人,在两位老师的悉心指导中,我不仅学到了扎实的专业知识,也在怎样处人处事等方面收益很多;同时他们对工作的积极热情、认真负责、有条不紊、实事求是的态度,给我留下了深刻的印象,使我受益非浅。在此我谨向两位指导老师表示衷心的感谢和深深的敬意!
在论文完成过程中,本人还得到了授课的各位老师和同窗同学的热心帮助,本人向他们表示深深的谢意!我也要感谢我的母校,是它提供了良好的学习环境和生活环境,让我的大学生活丰富多姿,为我的人生留下精彩的一笔。
感谢等在毕业设计工作中给予的帮助。
感谢我的学友和朋友对我的关心和帮助。
最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢!
附录一:英文文献原文
An Overview of Servlet and JSP Technology
Abstract: Servlet program running in the server-side, dynamically generated Web page with the traditional CGI and many other similar compared to CGI technology, Java Servlet with a more efficient, easier to use, more powerful and has better portability, more savings to invest .
Key words: JSP Technology, Servlet, HTTP server
1.1 A Servlet's Job
Servlets are Java programs that run on Web or application servers, acting as a middle layer between requests coming from Web browsers or other HTTP clients and databases or applications on the HTTP server. Their job is to perform the
following tasks, as illustrated in Figure 1-1.
Figure 1-1
1.Read the explicit data sent by the client.
The end user normally enters this data in an HTML form on a Web page. However, the data could also come from an applet or a custom HTTP client program.
2.Read the implicit HTTP request data sent by the browser.
Figure 1-1 shows a single arrow going from the client to the Web server (the layer where servlets and JSP execute), but there are really two varieties of data: the explicit data that the end user enters in a form and the behind-the-scenes HTTP information. Both varieties are critical. The HTTP information includes cookies, information about media types and compression schemes the browser understands, and so on.
3.Generate the results.
This process may require talking to a database, executing an RMI or EJB call, invoking a Web service, or computing the response directly. Your real data may be in a relational database. Fine. But your database probably doesn't speak HTTP or return results in HTML, so the Web browser can't talk directly to the database. Even if it could, for security reasons, you probably would not want it to. The same argument applies to most other applications.You need the Web middle layer to extract the results
inside a document.
4.Send the explicit data (i.e., the document) to the client.
This document can be sent in a variety of formats, including text (HTML or XML), binary (GIF images), or even a compressed format like gzip that is layered on top of some other underlying format. But, HTML is by far the most common format, so an important servlet/JSP task is to wrap the results inside of HTML.
5.Send the implicit HTTP response data.
Figure 1-1 shows a single arrow going from the Web middle layer (the servlet or JSP page) to the client. But, there are really two varieties of data sent: the document itself and the behind-the-scenes HTTP information. Again, both varieties are critical to effective development. Sending HTTP response data involves telling the browser or other client what type of document is being returned (e.g., HTML), setting cookies and caching parameters, and other such tasks.
1.2 Why Build Web Pages Dynamically?
many client requests can be satisfied by prebuilt documents, and the server would handle these requests without invoking servlets. In many cases, however, a static result is not sufficient, and a page needs to be generated for each request. There are a number of reasons why Web pages need to be built on-the-fly:
1. The Web page is based on data sent by the client.
For instance, the results page from search engines and order-confirmation pages at online stores are specific to particular user requests. You don't know what to display until you read the data that the user submits. Just remember that the user submits two kinds of data: explicit (i.e., HTML form data) and implicit (i.e., HTTP request headers). Either kind of input can be used to build the output page. In particular, it is quite common to build a user-specific page based on a cookie value.
2.The Web page is derived from data that changes frequently.
If the page changes for every request, then you certainly need to build the response at request time. If it changes only periodically, however, you could do it two ways: you could periodically build a new Web page on the server (independently of client requests), or you could wait and only build the page when the user requests it. The right approach depends on the situation, but sometimes it is more convenient to do the latter: wait for the user request. For example, a weather report or news headlines site might build the pages dynamically, perhaps returning a previously built page if that page is still up to date.
3.The Web page uses information from corporate databases or other server-side sources.
If the information is in a database, you need server-side processing even if the client is using dynamic Web content such as an applet. Imagine using an applet by itself for a search engine site:
"Downloading 50 terabyte applet, please wait!" Obviously, that is silly; you need to talk to the database. Going from the client to the Web tier to the database (a three-tier approach) instead of from an applet directly to a database (a two-tier approach) provides increased flexibility and security with little or no performance penalty. After all, the database call is usually the rate-limiting step, so going through the Web server does not slow things down. In fact, a three-tier approach is often faster because the middle tier can perform caching and connection pooling.
In principle, servlets are not restricted to Web or application servers that handle HTTP requests but can be used for other types of servers as well. For example, servlets could be embedded in FTP or mail servers to extend their functionality. And, a servlet API for SIP (Session Initiation Protocol) servers was recently standardized (see
http://jcp.org/en/jsr/detail?id=116). In practice, however, this use of servlets has not caught on, and we'll only be discussing HTTP servlets.
1.3 The Advantages of Servlets Over "Traditional" CGI
Java servlets are more efficient, easier to use, more powerful, more portable, safer, and cheaper than traditional CGI and many alternative CGI-like technologies.
1.Efficient
With traditional CGI, a new process is started for each HTTP request. If the CGI program itself is relatively short, the overhead of starting the process can dominate the execution time. With servlets, the Java virtual machine stays running and handles each request with a lightweight Java thread, not a heavyweight operating system process. Similarly, in traditional CGI, if there are N requests to the same CGI program, the code for the CGI program is loaded into memory N times. With servlets, however, there would be N threads, but only a single copy of the servlet class would be loaded. This approach reduces server memory requirements and saves time by instantiating fewer objects. Finally, when a CGI program finishes handling a request, the program terminates. This approach makes it difficult to cache computations, keep database connections open, and perform other optimizations that rely on persistent data. Servlets, however, remain in memory even after they complete a response, so it is straightforward to store arbitrarily complex data between client requests.
2.Convenient
Servlets have an extensive infrastructure for automatically parsing and decoding HTML form data, reading and setting HTTP headers, handling cookies, tracking sessions, and many other such high-level utilities. In CGI, you have to do much of this yourself. Besides, if you already know the Java programming language, why learn Perl too? You're already convinced that Java technology makes for more reliable and reusable code than does Visual Basic, VBScript, or C++. Why go back to those languages for server-side programming?
3.Powerful
Servlets support several capabilities that are difficult or impossible to accomplish with regular CGI. Servlets can talk directly to the Web server, whereas regular CGI programs cannot, at least not without using a server-specific API. Communicating with the Web server makes it easier to translate relative URLs into concrete path names, for instance. Multiple servlets can also share data, making it easy to implement database connection pooling and similar resource-sharing optimizations. Servlets can also maintain information from request to request, simplifying techniques like session tracking and caching of previous computations.
4.Portable
Servlets are written in the Java programming language and follow a standard API. Servlets are supported directly or by a plugin on virtually every major Web server. Consequently, servlets written for, say, Macromedia JRun can run virtually unchanged on Apache Tomcat, Microsoft Internet Information Server (with a separate plugin), IBM WebSphere, iPlanet Enterprise Server, Oracle9i AS, or StarNine WebStar. They are part of the Java 2 Platform, Enterprise Edition (J2EE; see
http://java.sun.com/j2ee/), so industry support for servlets is becoming even more pervasive.
5.Inexpensive
A number of free or very inexpensive Web servers are good for development use or deployment of low- or medium-volume Web sites. Thus, with servlets and JSP you can start with a free or inexpensive server and migrate to more expensive servers with high-performance capabilities or advanced administration utilities only after your project meets initial success. This is in contrast to many of the other CGI alternatives, which require a significant initial investment for he purchase of a proprietary package.
Price and portability are somewhat connected. For example, Marty tries to keep track of the countries of readers that send him questions by email. India was near the top of the list, probably #2 behind the U.S. Marty also taught one of his JSP and servlet training courses (see
http://courses.coreservlets.com/) in Manila, and there was great interest in servlet and JSP technology there.
Now, why are India and the Philippines both so interested? We surmise that the answer is twofold. First, both countries have large pools of well-educated software developers. Second, both countries have (or had, at that time) highly unfavorable currency exchange rates against the U.S. dollar. So, buying a special-purpose Web server from a U.S. company consumed a large part of early project funds.
But, with servlets and JSP, they could start with a free server: Apache Tomcat (either standalone, embedded in the regular Apache Web server, or embedded in Microsoft IIS). Once the project starts to become successful, they could move to a server like Caucho Resin that had higher performance and easier administration but that is not free. But none of their servlets or JSP pages have to be rewritten. If their project becomes even larger, they might want to move to a distributed (clustered) environment. No problem: they could move to Macromedia JRun Professional, which supports distributed applications (Web farms). Again, none of their servlets or JSP pages have to be rewritten. If the project becomes quite large and complex, they might want to use Enterprise JavaBeans (EJB) to encapsulate their business logic. So, they might switch to BEA WebLogic or Oracle9i AS. Again, none of their servlets or JSP pages have to be rewritten. Finally, if their project becomes even bigger, they might move it off of their Linux box and onto an IBM mainframe running IBM WebSphere. But once again, none of their servlets or JSP pages have to be rewritten.
6.Secure
One of the main sources of vulnerabilities in traditional CGI stems from the fact that the programs are often executed by general-purpose operating system shells. So, the CGI programmer must be careful to filter out characters such as backquotes and semicolons that are treated specially by the shell. Implementing this precaution is harder than one might think, and weaknesses stemming from this problem are constantly being uncovered in widely used CGI libraries.
A second source of problems is the fact that some CGI programs are processed by languages that do not automatically check array or string bounds. For example, in C and C++ it is perfectly legal to allocate a 100-element array and then write into the 999th "element," which is really some random part of program memory. So, programmers who forget to perform this check open up their system to deliberate or accidental buffer overflow attacks.
Servlets suffer from neither of these problems. Even if a servlet executes a system call (e.g., with Runtime.exec or JNI) to invoke a program on the local operating system, it does not use a shell to do so. And, of course, array bounds checking and other memory protection features are a central part of the Java programming language.
7.Mainstream
There are a lot of good technologies out there. But if vendors don't support them and developers don't know how to use them, what good are they? Servlet and JSP technology is supported by servers from Apache, Oracle, IBM, Sybase, BEA, Macromedia, Caucho, Sun/iPlanet, New Atlanta, ATG, Fujitsu, Lutris, Silverstream, the World Wide Web Consortium (W3C), and many others. Several low-cost plugins add support to Microsoft IIS and Zeus as well. They run on Windows, Unix/Linux, MacOS, VMS, and IBM mainframe operating systems. They are the single most popular application of the Java programming language. They are arguably the most popular choice for developing medium to large Web applications. They are used by the airline industry (most United Airlines and Delta Airlines Web sites), e-commerce (
http://ofoto.com), online banking (First USA Bank, Banco Popular de Puerto Rico), Web search engines/portals (
http://excite.com), large financial sites (American Century Investments), and hundreds of other sites that you visit every day.
Of course, popularity alone is no proof of good technology. Numerous counter-examples abound. But our point is that you are not experimenting with a new and unproven technology when you work with server-side Java.
附录二:中文译文
1.1Servlet的功能
Servlets是运行在Web或应用服务器上的Java程序,它是一个中间层,负责连接来自Web浏览器或其他HTTP客户程序的请求和HTTP服务器上的数据库或应用程序。Servlet的工作是执行西门的任务,如图1.1所示 。
图1.1Web中间件的作用
(1) 读取客户发送的显式数据。
最终用户一般在页面的HTML表单中输入这些数据。然而,数据还有可能来自applet或定制的HTTP客户程序。
(2) 读取由浏览器发送的隐式请求数据。
图1.1中显示了一条从客户端到Web服务器的单箭头,但实际上从客户端传送到Web服务器的数据有两种,它们分别为用户在表单中输入的显式数据,以及后台的HTTP信息。两种数据都很重要。HTTP信息包括cookie、浏览器所能识别的媒体类型和压缩模式等。
图1.1
(3) 生成结果。
这个过程可能需要访问数据库、执行RMI或EJB调用、调用Web服务,或者直接计算得出对应的响应。实际的数据可能存储在关系型数据库中。该数据库可能不理解HTTP,或者不能返回HTML形式的结果,所有Web浏览器不能直接与数据库进行会话。即使它能够做到这一点,为了安全上的考虑,我们也不希望让它这么做。对应大多数其他应用
程序,也存在类似的问题。因此,我们需要Web中间层从HTTP流中提取输入数据,与应用程序会话,并将结果嵌入到文档中。
(4) 向客户发送显式数据(即文档)。
这个文档可以用各种格式发送,包括文本(HTML或XML),二进制(GIF图),甚至可以式建立在其他底层格式之上的压缩格式,如gzip。但是,到目前为止,HTML式最常用的格式,故而servlet和JSP的重要任务之一就式将结果包装到HTML中。
(5) 发送隐式的HTTP响应数据。
图1.1中显示了一条从Web中间层到客户端的单箭头。但是,实际发送的数据有两种:文档本身,以及后台的HTTP信息。同样,两种数据对开发来说都式至关重要的。HTTP响应数据的发送过程涉及告知浏览器或其他客户程序所返回文档的类型(如HTML),设置cookie和缓存参数,以及其他类似的任务。
1.2动态构建网页的原因
预先建立的文档可以满足客户的许多请求,服务器无需调用servlet就可以处理这些请求。然而,许多情况下静态的结果不能满足要求,我们需要针对每个请求生成一个页面。实时构建页面的理由有很多种:
1、网页基于客户发送的数据。
例如,搜索引擎生成的页面,以及在线商店的订单确认页面,都要针对特定的用户请求而产生。在没有读取到用户提交的数据之前,我们不知道应该显示什么。要记住,用户提交两种类型的数据:显示(即HTML表单的数据)和隐式(即HTTP请求的报头)。两种输入都可用来构建输出页面。基于cookie值针对具体用户构建页面的情况尤其普遍。
2、页面由频繁改变的数据导出。
如果页面需要根据每个具体的请求做出相应的改变,当然需要在请求发生时构建响应。但是,如果页面周期性地改变,我们可以用两种方式来处理它:周期性地在服务器上构建新的页面(和客户请求无关),或者仅仅在用户请求该页面时再构建。具体应该采用哪种方式要根据具体情况而定,但后一种方式常常更为方便,因为它只需简单地等待用户的请求。例如,天气预报或新闻网站可能会动态地构建页面,也有可能会返回之前构建的页面(如果它还是最新的话)。
3、页面中使用了来自公司数据库或其他数据库断数据源的信息。
如果数据存储在数据库中,那么,即使客户端使用动态Web内容,比如applet,我们依旧需要执行服务器端处理。想象以下,如果一个搜索引擎网站完全使用applet,那么用户将会看到:“正在下载50TB的applet,请等待!”。显然,这样很愚蠢;这种情况下,我们需要与数据库进行会话。从客户端到Web层再到数据库(三层结构),要比从applet直接到数据库(二层结构)更灵活,也更安全,而性能上的损失很少甚至没有。毕竟数据库调用通常是对速度影响最大的步骤,因而,经过中间层可以执行高速缓存和连接共享。
理论上讲,servlet并非只用于处理HTTP请求的Web服务器或应用服务器,它同样可以用于其他类型的服务器。例如,servlet能够嵌入到FTP或邮件服务器中,扩展他们的功能。而且,用于会话启动协议服务器的servlet API最近已经被标准化(参见
http://jcp.org/en/jsr/detail?id=116)。但在实践中,servlet的这种用法尚不流行,在此,我们只论述HTTP Servlet。
1.3 Servlet相对于“传统”CGI的优点
和传统CGI及许多类CGI技术相比,Java servlet效率更高、更易用、更强大、更容易移植、更安全、也更廉价。
1、效率
应用传统的CGI,针对每个HTTP请求都用启动一个新的进程。如果CGI程序自身相对比较简短,那么启动进程的开销会占用大部分执行时间。而使用servlet,Java虚拟机会一直运行,并用轻量级的Java线程处理每个请求,而非重量级的操作系统进程。类似地,应用传统的CGI技术,如果存在对同一CGI程序的N个请求,那么CGI程序的代码会载入内存N次。同样的情况,如果使用servlet则启动N个线程,单仅仅载入servlet类的单一副本。这种方式减少了服务器的内存需求,通过实例化更少的对象从而节省了时间。最后,当CGI程序结束对请求的处理之后,程序结束。这种方式难以缓存计算结果,保持数据库连接打开,或是执行依靠持续性数据的其他优化。然而,servlet会一直停留在内存中(即使请求处理完毕),因而可以直接存储客户请求之间的任意复杂数据。
2、便利
Servlet提供大量的基础构造,可以自动分析和解码HTML的表单数据,读取和设置
HTTP报头,处理cookie,跟踪会话,以及其他次类高级功能。而在CGI中,大部分工作都需要我们资金完成。另外,如果您已经了解了Java编程语言,为什么还有学校Perl呢?您已经承认应用Java技术编写的代码要比Visual Basic,VBScript或C++编写的代码更可靠,且更易重用,为什么还有倒退回去选择那些语言来开发服务器端的程序呢?
3、强大
Servlet支持常规CGI难以实现或根本不能实现的几项功能。Servlet能够直接于Web服务器对话,而常规的CGI程序做不到这一点,至少在不使用服务器专有API的情况下是这样。例如,与Web服务器的通信使得讲相对URL转换成具体的路径名变得更为容易。多个servlet还可以共享数据,从而易于实现数据库连接共享和类似的资源共享优化。Servlet还能维护请求之间的信息,使得诸如会话跟踪和计算结果缓存等技术变得更为简单。
4、可移植性
Servlet使用Java编程语言,并且遵循标准的API。所有主要的Web服务器。实际上都直接或通过插件支持servlet。因此。为Macromedia JRun编写的servlet,可以不经过任何修改地在Apache Tomcat,Microsoft Internet Information Server,IBM WebSphere 。iPlanet Enterprise Server。Oracle9i AS 或者StrNine WebStar上运行。他们是java2平台企业版的一部分,所以对servlet的支持越来越普遍。
5、廉价
对于开发用的网站、低容量或中等容量网站的部署,有大量免费或极为廉价的Web服务器可供选择。因此,通过使用servlet和jsp,我们可以从免费或廉价的服务器开始,在项目获得初步成功后,在移植到更高性能或高级管理工具的昂贵的服务器上。这与其他CGI方案形成鲜明的对比,这些CGI方案在初期都需要为购买专利软件包投入大量的资金。
价格和可移植性在某种程度上是相互关联的。例如,Marty记录了所有通过电子邮件向他发送问题的读者的所在国。印度接近列表的顶端,可能仅次于美国。Marty曾在马尼拉讲授过jsp和servlet培训课程,那儿对servlet和jsp技术抱很大的兴趣。
那么,为什么印度和菲律宾都对这项技术着呢感兴趣呢?我们推测答案可能分两部分。首先,这两个国家都拥有大量训练有素的软件开发人员。其次,这两个国家的货币
对美元的汇率都极为不利。因此,从美国公司那里购买专用Web服务器会消耗掉项目的大部分前期资金。
但是,使用servlet 和JSP,他们能够从免费的服务器开始:Apache Tomcat。项目取得成功之后,他们可以转移到性能更高、管理更容易,但需要付费的服务器。他们的servlet和jsp不需要重写编写。如果他们的项目变得更庞大,他们或许希望转移到分布式环境。没有问题:他们可以转而使用Macromedia JRun Professional,该服务器支持分布式应用。同样,他们的servlet和jsp没有任何部分需要重写。如果项目变得极为庞大,错综复杂,他们或许希望使用Enterprise JavaBeans来封装他们的商业逻辑。因此,他们可以切换到BEA WebLogic或Oracle9i AS。同样,不需要对servlet和jsp做出更改。最后,如果他们的项目变得更庞大,他们或许将他从Linux转移到运行IBM WebSphere的IBM大型机上。他们还是不需要做出任何更改。
6、安全
传统CGI程序中主要的漏洞来源之一就是,CGI程序常常由通过的操作系统外壳来执行。因此,CGI程序必须仔细地过滤掉那些可能被外壳特殊处理的字符,如反引导和分号。实现这项预防措施的难度可能超出我们的想象,在广泛应用的CGI库中,不断发现由这类问题引发的弱点。
问题的第二个来源是,一些CGI程序用不自动检查数组和字符串边界的语言编写而成。例如,在C和C++中,可以分配一个100个元素的数组,然后向第999个“元素“写入数据——实际上是程序内存的随机部分,这完全合法。因而,如果程序员忘记执行这项检查,就会将系统暴露在蓄意或偶然的缓冲区溢出攻击之下。
Servlet不存在这些问题。即使servlet执行系统调用激活本地操作系统上的程序,它也不会用到外壳来完成这项任务。当然,数组边界的检查以及其他内存包含特性是java编程语言的核心部分。
7、主流
虽然存在许多很好的技术,但是,如果提供商助支持他们,或开发人员不知道如何使用这些技术,那么它们的优点又如何体现呢?servlet和jsp技术得到服务器提供商的广泛支持,包括Apache,Oracle,IBM,Sybase,BEA,Maromedia,Causho,Sun/iPlanet,New Atlanta,ATG,Fujitsu,Lutris,Silverstream,World Wide Web Consortinrm ,以及其他服务器。存在几种低廉的插件,通过应用这些插件,Microsoft IIS和Zeus 5也同样支持servlet和jsp技术,它们运行在Windows,Unix/Linus,MacOS,VMS,和IBM大型机操作系统之上。它们用在航空业、电子商务、在线银行、web搜索引擎、门户、大型金融网站、以及成百上千您日常光顾的其他网站。
当然,仅仅是流行并不能证明技术的优越性。很多泛美的例子。但我们的立场是:服务器端Java本非一项新的、为经证实的技术。