1、99级信息与计算科学毕业论文基于JAVA的网上商城系统的开发与实现摘要:网上商城系统是基于JAVA的一个电子商务系统,其主要作用就是实现商城的一些功能,如:买卖商品,计算积分,查看产品的具体信息,与卖家联系,交友等功能!最后对整个网上商城系统作了一个简要的总结并附录上了一些功能模块的主要源代码。关键词:网上商城系统;B/S模式;JSP技术;mysql数据库。 Based on JAVA online mall system development and implementationAbstract: Online mall system is based on JAVA a e-commer
2、ce system, the main function is to realize mall of some functions, such as: buying and selling goods, calculated integral, check product specific information, contact the seller, the function such as friends!The last of the whole online mall system gives a brief summary and appendix on some function
3、 modules main source code.Keywords: online mall system; The B/S mode; JSP technology; Mysql database.- 25 -网上商城设计(论文)摘要I目录:11 引言22 高校教材管理系统的需求分析22.1 用户需求分析22.1.1 普通用户主要需要:22.1.2 系级管理员主要需要:22.2 数据字典的描述22.3 教材管理系统的数据流图23网上商城系统分析与设计33.1 系统设计总体思想、目标33.2 网上商城系统的ER模型33.3 网上商城系统结构、功能设计33.3.1 系统结构设计33.3.2 系
4、统功能模块设计33.4 网上商城系统的数据库设计34 系统平台、计算模式及技术34.1 计算模式的进化及本系统选用的模式优越性34.1.1 集中式管理主机/终端模式44.1.2 Client/Server模式44.1.3 Brower/Server模式44.1.4 系统采用B/S三层体系结构模式的优越性44.2 JSP 技术44.2.2 JSP内建对象64.3 mysql数据库94.3.1 mysql概述94.3.2 mysql常用命令95 系统实现115.1 用户登陆流程115.2 买家登陆流程115.3 卖家登陆流程135.4 用户注册流程145.4.1 用户注册流程图145.5 数据库表
5、单创建语句156 网上商城系统设计的技术关键156.1 JSP主要网页代码156.2 mysql数据库表单截图226.3 Java语言控制主要类代码237 系统试运行结果与评价261 引言 随着计算机的普及以及网络技术的应用,网上商城已经成为一个新的工具和一个新兴的市场,网上商城类似于现实世界当中的商店,差别是利用电子商务的各种手段,达成从买到卖的过程的虚拟商店,从而减少中间环节,消除运输成本和代理中间的差价,造就对普通消费,和加大市场流通带来巨大的发展空间。尽能的还消费者以利益,带动公司发展和企业腾飞,引导国民经济稳定快速发展,推动国内生产总值。2 高校教材管理系统的需求分析 本网上商城构建
6、初始目标主要是面向广大消费者,由于不同人群对商品的需求不同,因而购物网站应在具有自己特色的同时应适合不同人士的需要。2.1 用户需求分析 用户主要是买家和卖家以及网站的管理人员:2.1.1 普通用户主要需要: 卖家:上传商品、注册用户、更改商品、删除商品、增加商品、管理已有商品等买家:查看所有商品、搜索某一商品、查看具体的产品以及厂家信息等2.1.2 系级管理员主要需要:主要是维护网站秩序,比如说终止某一买家或者卖家的使用权限等2.2 数据字典的描述数据字典是关于数据的信息的集合,也就是对数据流图包含的所有元素的定义的集合。任何字典最重要的用途都是供人查阅对不了解的条目的解释,数据字典的作用也
7、正是在软件分析和设计的过程中给人提供关于数据的描述信息。限于篇幅,下面给出本系统的部分数据字典描述: 买家信息的数据字典的描述: 表名:mall_Buyers 表内元组: BuyId BuyName BuySex BuyPass BuyLevel BuyAddress BuyAge 卖家信息的数据字典的描述:表名:mall_Sellers 表内元组:SeId SeName SeSex SePass SeLevel SeAddress SeAge 商品信息的数据字典的描述:表名:mall_Goods 表内元组: GoodId GoodName GoodPrice Goodintroduction
8、 SeId Goodkinds Goodinventory2.3 教材管理系统的数据流图下面简要介绍部分需求的数据流图:mall_BuyersDoLoginServeletmall_Goodsmall_Sellers JSP2.3.1 教材库存查询的数据流图(DFD)用户操作数据流程图:商品信息表mall_Goods产品信息商品信息查询信息查询方式买家卖家接受查询方式信息处理产生查询结果买家卖家图2-1商品库查询的数据流图2.3.5 用户信息管理的数据流图(DFD)增加、修改和删除用户资料,具体的过程的数据流图(DFD)表示如下:3网上商城系统分析与设计3.1 系统设计总体思想、目标3.2 网
9、上商城系统的ER模型经过对网上商城系统的分析,我们将系统划分出了买家用户、卖家用户、商品信息三个实体,其各个实体的属性如下:本系统的具体ER模型如下:买家或卖家序号用户名密码性别图3-1普通用户ER图 3.3 网上商城系统结构、功能设计3.3.1 系统结构设计 网上商城系统结构主要是JAVA代码用作控制语句、JSP用于数据接收及显示、mysql用于术语的存储,采用常用的Brower/Server模式。3.3.2 系统功能模块设计 功能模块主要有:登录验证模块、登陆显示模块、数据库操作模块、信息显示模块等3.4 网上商城系统的数据库设计 由于此网上商城属于网上商城的简易模式,所以基本数据库表的建
10、立有mall_Goods、mall_Buyers、mall_Sellers。4 系统平台、计算模式及技术 系统的硬件平台:普通PC机 系统的软件平台:MyEclipse、mysql、Navicat for MySQL、tomcat4.1 计算模式的进化及本系统选用的模式优越性回顾计算机的发展史,计算模式有过三次质的飞跃:4.1.1 集中式管理主机/终端模式以主机为中心的计算环境 ,数据管理 ,事务处理高度集中 ,起始成本高 ,系统维护升级只涉及主机,管理成本低 ,但用户端缺乏个人定置 ,无任何处理功能。适用于大规模集中式应用 ,具有较高的效率和安全性 ,但存在执行效率及容量不足问题。4.1.2
11、 Client/Server模式 它把集中管理模式转化为一种服务器与客户机负荷均衡的分布式计算模式 ,解决了执行效率及容量不足的问题。该结构以 PC为主 ,适合部门级应用。初级成本低 ,但随着应用规模扩展 ,网络上异种资源类型的增多,开发、管理、维护的复杂程度加大,频繁的软硬件升级 ,后期成本骤升,缺乏关键事物处理的安全性与并发处理能力。4.1.3 Brower/Server模式 以网络中心计算为特征的 BPS结构恰到好处地取长补短 ,兼容并蓄 ,使计算体系真正成为企业生存发展的生命力。 BPS结构使数据及应用可通过不同平台、不同网络存取 ,与平台无关 ,伸缩性大 ,为企业、行业提供了开放的基
12、于标准的综合性服务计算环境 ,它将处理、储存、通讯能力移入网络 ,集中主机 P终端和 CPS的优点 ,管理集中 ,只涉及网络服务器 ,NC通过下载获得升级功能 ;同时信息高度分散 ,通过 HTTP、JAVA可访问联接任何 URL资源和应用 ,共享程度高 ,可伸缩扩展性强 ,具有高度开放性和灵活性 ,同时具备高速率和安全性 ,使用户真正投资于应用而不是计算机本身。4.1.4 系统采用B/S三层体系结构模式的优越性1、开放的标准2、分布计算的基础结构3、较低的开发和维护成本4、使用简单 ,界面友好5、系统灵活6、保障系统的安全性7、信息共享度高4.2 JSP 技术4.2.1 JSP概述JSP(Ja
13、vaServer Pages)是一种基于Java的脚本技术。在JSP 的众多优点之中,其中之一是它能将 HTML 编码从 Web 页面的业务逻辑中有效地分离出来。用 JSP 访问可重用的组件,如 Servlet、JavaBean 和基于 Java 的 Web 应用程序。JSP 还支持在 Web 页面中直接嵌入 Java 代码。可用两种方法访问 JSP 文件:浏览器发送 JSP 文件请求、发送至 Servlet 的请求。1. JSP 文件访问 Bean 或其它能将生成的动态内容发送到浏览器的组件。图5-1说明了该 JSP 访问模型。当 Web 服务器接收到一个 JSP 文件请求时,服务器将请求发
14、送至 WebSphere应用服务器。WebSphere应用服务器 对 JSP 文件进行语法分析并生成 Java 源文件(被编译和执行为 Servlet)。Java 源文件的生成和编译仅在初次调用 Servlet 时发生,除非已经更新了原始的 JSP 文件。在这种情况下,WebSphere应用服务器 将检测所做的更新,并在执行它之前重新生成和编译 Servlet。图5-1:浏览器发送 JSP 文件请求2. 发送至 Servlet 的请求生成动态内容,并调用 JSP 文件将内容发送到浏览器。图5-2说明了该访问模型。该访问模型使得将内容生成从内容显示中分离出来更为方便。WebSphere应用服务器
15、 支持 HttpServiceRequest 对象和 HttpServiceResponse 对象的一套新方法。这些方法允许调用的 Servlet 将一个对象放入(通常是一个 Bean)请求对象中,并将该请求传递到另一个页面(通常是一个 JSP 文件)以供显示。调用的页面从请求对象中检索 Bean, 并用 JSP 来生成客户机端的 HTML。图5-2:发送至 Servlet 的请求5.2 JSP示例浏览器通过一个Web 页面中的HTML表单请求一个servlet(PopulateBeanServlet),该servlet创建一个名为 dataBean 的DataBean 实例,并调用 JSP
16、文件将内容发送到浏览器。Servlet 示例和 JSP 文件示例说明了启用内容分离的 JSP 访问模型。A. Servlet 是由下列Web 页面中的 HTML 表单来调用的。 运行 PopulateBeanServlet您是否希望运行 PopulateBeanServlet?B. 被请求的servlet为PopulateBeanServlet, 其源代码如下:/*Servlet 示例:PopulateBeanServlet.java *这个servlet创建一个名为 dataBean 的DataBean 实例,设置dataBean的若干个属性, *将dataBean放置在当前“请求”对象中,
17、 *调用 JSP 文件(DisplayData.jsp)来格式化并显示dataBean的数据*/import java.io.*;import java.beans.Beans; import javax.servlet.*;import javax.servlet.http.*;import javax.ejb.CreateException;public class PopulateBeanServlet extends HttpServlet public void Service(HttpServletRequest req, HttpServletResponse res)throw
18、s ServletException, IOException try dataBean = (DataBean) Beans.instantiate(this.getClass().getClassLoader(), DataBean);catch (Exception ex) throw new ServletException(Cant create BEAN of class DataBean: metaData.setSQL(getSQLString();/ Set some Bean properties (content generation)dataBean.setProp1(
19、Value1);dataBean.setProp2(Value2);dataBean.setProp3(Value3);/ To send the Bean to a JSP file for content formatting and display/ 1) 将dataBean放置在当前“请求”对象中,(com.sun.server.http.HttpServiceRequest) req).setAttribute(dataBean, dataBean);/ 2) 使用callPage 方法调用JSP文件,文件名为DisplayData.jsp,并把请求对象传递给JSP。(com.sun
20、.server.http.HttpServiceResponse) res).callPage(/DisplayData.jsp, req); /end of service mehtod /* end of class PopulateBeanServlet */C. 被调用的JSP文件为DisplayData.jsp,其内容如下: Bean Data DisplayThe value of Bean property 2 is The value of Bean property 3 is 4.2.2 JSP内建对象1.request对象 客户端的请求信息被封装在request对象中,通过
21、它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。 序号 方 法 说 明 1 object getAttribute(String name) 返回指定属性的属性值 2 Enumeration getAttributeNames() 返回所有可用属性名的枚举 3 String getCharacterEncoding() 返回字符编码方式 4 int getContentLength() 返回请求体的长度(以字节数) 5 String getContentType() 得到请求体的MIME类型 6 ServletInputStream getInputSt
22、ream() 得到请求体中一行的二进制流 7 String getParameter(String name) 返回name指定参数的参数值 8 Enumeration getParameterNames() 返回可用参数名的枚举 9 String getParameterValues(String name) 返回包含参数name的所有值的数组 10 String getProtocol() 返回请求用的协议类型及版本号 11 String getScheme() 返回请求用的计划名,如:http.https及ftp等 12 String getServerName() 返回接受请求的服务器
23、主机名 13 int getServerPort() 返回服务器接受此请求所用的端口号 14 BufferedReader getReader() 返回解码过了的请求体 15 String getRemoteAddr() 返回发送此请求的客户端IP地址 16 String getRemoteHost() 返回发送此请求的客户端主机名 17 void setAttribute(String key,Object obj) 设置属性的属性值 18 String getRealPath(String path) 返回一虚拟路径的真实路径 2.response对象 response对象包含了响应客户请
24、求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。 序号 方 法 说 明 1 String getCharacterEncoding() 返回响应用的是何种字符编码 2 ServletOutputStream getOutputStream() 返回响应的一个二进制输出流 3 PrintWriter getWriter() 返回可以向客户端输出字符的一个对象 4 void setContentLength(int len) 设置响应头长度 5 void setContentType(String type) 设置响应的MIME类型 6 sendRed
25、irect(java.lang.String location) 重新定向客户端的请求 3.session对象 session对象指的是客户端与服务器的一次会话,从客户端连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例. 序号 方 法 说 明 1 long getCreationTime() 返回SESSION创建时间 2 public String getId() 返回SESSION创建时JSP引擎为它设的惟一ID号 3 long getLastAccessedTime() 返回此SESSION里客户端最近一次请求时间 4
26、int getMaxInactiveInterval() 返回两次请求间隔多长时间此SESSION被取消(ms) 5 String getValueNames() 返回一个包含此SESSION中所有可用属性的数组 6 void invalidate() 取消SESSION,使SESSION不可用 7 boolean isNew() 返回服务器创建的一个SESSION,客户端是否已经加入 8 void removeValue(String name) 删除SESSION中指定的属性 9 void setMaxInactiveInterval() 设置两次请求间隔多长时间此SESSION被取消(m
27、s) 4.out对象 out对象是JspWriter类的实例,是向客户端输出内容常用的对象 序号 方 法 说 明 1 void clear() 清除缓冲区的内容 2 void clearBuffer() 清除缓冲区的当前内容 3 void flush() 清空流 4 int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0 5 int getRemaining() 返回缓冲区还剩余多少可用 6 boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常 7 void close() 关闭输出流 5.page对象 page对象就是指向当前JSP
28、页面本身,有点象类中的this指针,它是java.lang.Object类的实例 序号 方 法 说 明 1 class getClass 返回此Object的类 2 int hashCode() 返回此Object的hash码 3 boolean equals(Object obj) 判断此Object是否与指定的Object对象相等 4 void copy(Object obj) 把此Object拷贝到指定的Object对象中 5 Object clone() 克隆此Object对象 6 String toString() 把此Object对象转换成String类的对象 7 void not
29、ify() 唤醒一个等待的线程 8 void notifyAll() 唤醒所有等待的线程 9 void wait(int timeout) 使一个线程处于等待直到timeout结束或被唤醒 10 void wait() 使一个线程处于等待直到被唤醒 11 void enterMonitor() 对Object加锁 12 void exitMonitor() 对Object开锁 6.application对象 application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对
30、象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。 序号 方 法 说 明 1 Object getAttribute(String name) 返回给定名的属性值 2 Enumeration getAttributeNames() 返回所有可用属性名的枚举 3 void setAttribute(String name,Object obj) 设定属性的属性值 4 void removeAttribute(String name) 删除一属性及其属性值 5 Str
31、ing getServerInfo() 返回JSP(SERVLET)引擎名及版本号 6 String getRealPath(String path) 返回一虚拟路径的真实路径 7 ServletContext getContext(String uripath) 返回指定WebApplication的application对象 8 int getMajorVersion() 返回服务器支持的Servlet API的最大版本号 9 int getMinorVersion() 返回服务器支持的Servlet API的最大版本号 10 String getMimeType(String file)
32、 返回指定文件的MIME类型 11 URL getResource(String path) 返回指定资源(文件及目录)的URL路径 12 InputStream getResourceAsStream(String path) 返回指定资源的输入流 13 RequestDispatcher getRequestDispatcher(String uripath) 返回指定资源的RequestDispatcher对象 14 Servlet getServlet(String name) 返回指定名的Servlet 15 Enumeration getServlets() 返回所有Servlet
33、的枚举 16 Enumeration getServletNames() 返回所有Servlet名的枚举 17 void log(String msg) 把指定消息写入Servlet的日志文件 18 void log(Exception exception,String msg) 把指定异常的栈轨迹及错误消息写入Servlet的日志文件 19 void log(String msg,Throwable throwable) 把栈轨迹及给出的Throwable异常的说明信息 写入Servlet的日志文件 7.exception对象 exception对象是一个例外对象,当一个页面在运行过程中发生
34、了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象 序号 方 法 说 明 1 String getMessage() 返回描述异常的消息 2 String toString() 返回关于异常的简短描述消息 3 void printStackTrace() 显示异常及其栈轨迹 4 Throwable FillInStackTrace() 重写异常的执行栈轨迹 8.pageContext对象 pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访
35、问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext。 序号 方 法 说 明 1 JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out) 2 HttpSession getSession() 返回当前页中的HttpSession对象(session) 3 Object getPage() 返回当前页的Object对象(page) 4 ServletRequest getRequest() 返回当前页的ServletRequest对象(request)
36、5 ServletResponse getResponse() 返回当前页的ServletResponse对象(response) 6 Exception getException() 返回当前页的Exception对象(exception) 7 ServletConfig getServletConfig() 返回当前页的ServletConfig对象(config) 8 ServletContext getServletContext() 返回当前页的ServletContext对象(application) 9 void setAttribute(String name,Object a
37、ttribute) 设置属性及属性值 10 void setAttribute(String name,Object obj,int scope) 在指定范围内设置属性及属性值 11 public Object getAttribute(String name) 取属性的值 12 Object getAttribute(String name,int scope) 在指定范围内取属性的值 13 public Object findAttribute(String name) 寻找一属性,返回起属性值或NULL 14 void removeAttribute(String name) 删除某属性
38、 15 void removeAttribute(String name,int scope) 在指定范围删除某属性 16 int getAttributeScope(String name) 返回某属性的作用范围 17 Enumeration getAttributeNamesInScope(int scope) 返回指定范围内可用的属性名枚举 18 void release() 释放pageContext所占用的资源 19 void forward(String relativeUrlPath) 使当前页面重导到另一页面 20 void include(String relativeUrl
39、Path) 在当前位置包含另一文件 9.config对象 config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象) 序号 方 法 说 明 1 ServletContext getServletContext() 返回含有服务器相关信息的ServletContext对象 2 String getInitParameter(String name) 返回初始化参数的值 3 Enumeration getInitParameterNames(
40、) 返回Servlet初始化所需所有参数的枚举 4.3 mysql数据库4.3.1 mysql概述MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。MySQL的SQL“结构化查询语言”。SQL是用于访问数据库的最常用标准化语言。MySQL软件采用了GPL(GNU通用公共许可证)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站
41、为了降低网站总体拥有成本而选择了MySQL作为网站数据库。4.3.2 mysql常用命令1:使用SHOW语句找出在服务器上当前存在什么数据库:mysql SHOW DATABASES;2:2、创建一个数据库MYSQLDATAmysql CREATE DATABASE MYSQLDATA;3:选择你所创建的数据库mysql USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)4:查看现在的数据库中存在什么表mysql SHOW TABLES;5:创建一个数据库表mysql CREATE TABLE MYTABLE (name VARCHAR(20),
42、sex CHAR(1);6:显示表的结构:mysql DESCRIBE MYTABLE;7:往表中加入记录mysql insert into MYTABLE values (”hyq”,”M”);8:用文本方式将数据装入数据库表中(例如D:/mysql.txt)mysql LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE;9:导入.sql文件命令(例如D:/mysql.sql)mysqluse database;mysqlsource d:/mysql.sql;10:删除表mysqldrop TABLE MYTABLE;11:清空表mysqldelete from MYTABLE;12:更新表中数据mysqlupdate MYTABLE set sex=”f”