胡康秀 王兵賢
[摘 要]本文以MYSQL為數(shù)據(jù)庫開發(fā)平臺,以Tomcat網(wǎng)絡(luò)信息服務(wù)作為應(yīng)用服務(wù)器,采用JSP(Java Server Pages)技術(shù)開發(fā)了一個網(wǎng)上書店銷售系統(tǒng),該系統(tǒng)是一個動態(tài)的、交互式的、具有商品提供功能和系統(tǒng)管理功能的電子商務(wù)系統(tǒng)。
[關(guān)鍵詞]JSP;Tomcat;網(wǎng)上書店銷售系統(tǒng)
[中圖分類號]F724.6;TP393
[文獻標識碼]A
[文章編號]1673-0194(2009)05-0106-04
伴隨著電子商務(wù)技術(shù)的不斷成熟,電子商務(wù)的功能也越來越強大,注冊用戶可以在網(wǎng)上搜索購買到自己想要的各種商品,初步讓人們體會到了足不出戶,便可隨意購物的快感。網(wǎng)上購物系統(tǒng)是一種具有交互功能的商業(yè)信息系統(tǒng),它向用戶提供靜態(tài)和動態(tài)兩類信息資源,當今比較流行的網(wǎng)上購物系統(tǒng),國外有“淘寶網(wǎng)”,國內(nèi)有“當當網(wǎng)”。本文以MYSQL為數(shù)據(jù)庫開發(fā)平臺,以Tomcat網(wǎng)絡(luò)信息服務(wù)作為應(yīng)用服務(wù)器,采用基于服務(wù)器端的JSP、Java的組件JavaBean,以及網(wǎng)頁編程語言HTML,構(gòu)建了一個小型動態(tài)商務(wù)網(wǎng)站——網(wǎng)上書店系統(tǒng)。該系統(tǒng)能實現(xiàn)用戶的注冊、登錄功能;能夠?qū)崿F(xiàn)圖書的查詢,訂購等功能,基本上具備一個網(wǎng)上商品銷售系統(tǒng)應(yīng)具備的功能,可以說,目前的大型商務(wù)網(wǎng)站也就是這個小型網(wǎng)站在內(nèi)容上的擴充和重復。
1 JSP語言及其特點
在傳統(tǒng)的網(wǎng)頁HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP標記(tag),就構(gòu)成了JSP網(wǎng)頁(*.jsp)。Web服務(wù)器在遇到訪問JSP網(wǎng)頁的請求時,首先執(zhí)行其中的程序片段,然后將執(zhí)行結(jié)果以HTML格式返回給用戶。程序片段可以操作數(shù)據(jù)庫、重新定向網(wǎng)頁以及發(fā)送E-mail等[1]。JSP基于強大的Java語言[2-4],具有良好的伸縮性,在網(wǎng)絡(luò)數(shù)據(jù)庫應(yīng)用開發(fā)領(lǐng)域具有得天獨厚的優(yōu)勢,而且它在多方面加速了動態(tài)Web頁面的開發(fā),譬如,將內(nèi)容的生成和顯示進行分離;強調(diào)可重用的、跨平臺的組件來執(zhí)行應(yīng)用程序所要求的更為復雜的處理;采用標識簡化頁面開發(fā);擁有Java語言“一次編寫,各處運行”的特點等。
2 系統(tǒng)需求分析及總體設(shè)計
2.1 需求分析
本系統(tǒng)是一個中小型的電子商務(wù)系統(tǒng)——網(wǎng)上書店,可以為各類用戶提供方便的在線買書環(huán)境。用戶可以在系統(tǒng)中實現(xiàn)注冊、瀏覽書籍、搜索查詢書籍、處理訂單等功能;管理員可以通過用戶管理、訂單管理、圖書管理等管理功能來對系統(tǒng)進行維護更新。
2.2 系統(tǒng)功能模塊設(shè)計
網(wǎng)上購物系統(tǒng)可以分為前臺和后臺兩個部分(如圖1所示),前臺部分由用戶使用(如圖2所示),主要包括用戶注冊、生成訂單、購物車管理、查看購物車訂購產(chǎn)品、訂單查詢、搜索引擎等模塊;后臺部分由管理員使用,主要包括管理員身份驗證、圖書管理、處理訂單、用戶信息管理等模塊。
圖上書店系統(tǒng)前臺功能用戶管理購物車管理訂單管理個人資料管理搜索引擎后臺功能管理員身份驗證商品管理處理訂單用戶信息管理……
3 系統(tǒng)設(shè)計
3.1 數(shù)據(jù)庫實現(xiàn)
創(chuàng)建數(shù)據(jù)表的腳本,代碼如下:
create database if not exists ′bookstore′;
use ′bookstore′;
/*
Table structure for allorder
*/
drop table if exists ′allorder′;
CREATE TABLE ′allorder′ (
′Id′ int(11) NOT NULL auto_increment,
′orderId′ varchar(20) NOT NULL default ″,
′BookNo′ int(11) NOT NULL default ′0′,
′Amount′ int(11) default NULL,
PRIMARY KEY (′Id′)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*
Table structure for book
*/
drop table if exists ′book′;
CREATE TABLE ′book′ (
′Id′ int(11) NOT NULL auto_increment,
用戶登錄在線購書在線
購書查看
購物車修改購買數(shù)量刪除已經(jīng)購的圖書提交購物車清空購物車繼續(xù)購書查看訂
單信息查看訂單詳細信息圖書
查詢購買購買查看圖書詳細信息查看圖書
詳細信息購買
′BookName′ varchar(40) NOT NULL default ″,
′BookClass′ int(11) NOT NULL default ′0′,
′Author′ varchar(25) default NULL,
′Publish′ varchar(150) default NULL,
′BookNo′ varchar(30) default NULL,
′Content′ text,
′Prince′ float default NULL,
′Amount′ int(11) default NULL,
′Leav_number′ int(11) default NULL,
′RegTime′ datetime NOT NULL default ′0000-00-00 00:00:00′,
′picture′ varchar(200) default NULL,
PRIMARY KEY (′Id′)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*
Table structure for bookadmin
*/
drop table if exists ′bookadmin′;
CREATE TABLE ′bookadmin′ (
′AdminUser′ varchar(20) default NULL,
′AdminPass′ varchar(50) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*
Table structure for bookclass
*/
drop table if exists ′bookclass′;
CREATE TABLE ′bookclass′ (
′Id′ int(11) NOT NULL auto_increment,
′ClassName′ varchar(30) NOT NULL default ″,
PRIMARY KEY (′Id′)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*
Table structure for orders
*/
drop table if exists ′orders′;
CREATE TABLE ′orders′ (
′Id′ int(11) NOT NULL auto_increment,
′orderId′ varchar(20) NOT NULL default ″,
′UserId′ int(11) NOT NULL default '0',
′SubmitTime′ datetime NOT NULL default ′0000-00-00 00:00:00′,
′ConsignmentTime′ datetime default NULL,
′TotalPrice′ float default NULL,
′content′ text,
′IPAddress′ varchar(20) default NULL,
′IsPayoff′ int(11) default NULL,
′IsSales′ int(11) default NULL,
PRIMARY KEY (′Id′)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*
Table structure for sequence
*/
drop table if exists ′sequence′;
CREATE TABLE ′sequence′ (
′id′ int(11) NOT NULL default ′0′
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*
Table structure for shop_user
*/
drop table if exists ′shop_user′;
CREATE TABLE ′shop_user′ (
′Id′ int(11) NOT NULL auto_increment,
′UserName′ varchar(20) NOT NULL default ″,
′PassWord′ varchar(50) NOT NULL default ″,
′Names′ varchar(20) default NULL,
′Sex′ char(2) default NULL,
′Address′ varchar(150) default NULL,
′Phone′ varchar(25) default NULL,
′Post′ varchar(8) default NULL,
′Email′ varchar(50) default NULL,
′RegTime′ datetime default NULL,
′RegIpAddress′ varchar(20) default NULL,
PRIMARY KEY (′Id′)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
3.2 用JSP連接數(shù)據(jù)庫
在本系統(tǒng)中,需要多次連接數(shù)據(jù)庫,而且這種連接是一項很消耗資源的操作,因此,在本系統(tǒng)中將數(shù)據(jù)庫連接的部分寫成了一個JavaBean。文件名為DataBase.java,關(guān)鍵代碼如下:
public class DataBase {
public Connection conn;
public Statement stmt;
public ResultSet rs=null;
public String sqlStr="";
public DataBase() {
this.connect();
}
public boolean connect(){
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url ="jdbc:mysql://localhost/bookstore?useUnicode=true&characterEncoding=gb2312";
conn=DriverManager.getConnection(url,"root","123456");
stmt = conn.createStatement ();
}catch(Exception ee){
System.out.println("connect db error:"+ee.getMessage());
return false;
}
return true;
}
public static void main(String args) {
try{
DataBase db = new DataBase();
db.connect();
}catch(Exception e){
e.printStackTrace();
}
}
}
4 系統(tǒng)詳細設(shè)計
4.1 前臺部分
4.1.1 前臺總體框架
前臺部分由用戶使用,包括用戶注冊、購物車管理、訂單管理、圖書查詢等幾個部分。網(wǎng)站前臺首頁的運行結(jié)果如圖3所示。用戶管理模塊主要包括用戶注冊、登錄兩個部分。
(1)用戶注冊:當用戶第一次登錄時首先要注冊,成為會員后,才可以購買物品.用戶可以通過單擊首頁的注冊按鍵來打開注冊頁面進行會員注冊操作,用戶注冊頁面的運行結(jié)果如圖4所示。
為了便于管理網(wǎng)站對用戶的管理,在index.jsp用戶注冊頁接收到的注冊信息要經(jīng)過嚴格的過濾,保證注冊用戶的唯一性,在提交表單后需要對數(shù)據(jù)表中的數(shù)據(jù)進行查詢,如果沒有找到,則在插入數(shù)據(jù)表時提示注冊成功,否則提示用戶已被占用,請重新注冊,關(guān)鍵代碼如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page session="true" %>
<jsp:useBean id="user" scope="page" class="bookshop.run.op_user" />
<%
String mesg = "";
String submit = request.getParameter("Submit");
if (submit!=null && !submit.equals("")) {
boolean isAdd=false;
try{
isAdd=user.add(request) ;
}catch(Exception ex){ex.printStackTrace();}
if(isAdd){
String username=user.getUserName();
session.setAttribute("username",new String(username.getBytes("ISO8859-1")));
session.setAttribute( "userid", Long.toString( user.getUserid() ) );
response.sendRedirect("info.jsp?action=regok");
} else if (!user.getMessage().equals("")) {
mesg = user.getMessage();
} else
mesg = "注冊時出現(xiàn)錯誤,請稍后再試";
}
%>
function openScript(url,name, width, height){
var Win = window.open(url,name,'width=' + width + ',height=' + height + ',
resizable=1,scrollbars=yes,menubar=no,status=yes' );
}
function checkform() {
if (document.form1.username.value==""){
alert("用戶名不能為空");
document.form1.username.focus();
return false;
}
if (document.form1.passwd.value==""){
alert("用戶密碼不能為空");
document.form1.passwd.focus();
return false;
}
if (document.form1.passwd.value!=document.form1.passconfirm.value){
alert("確認密碼不相符!");
document.form1.passconfirm.focus();
return false;
}
return true;
}
</script>
用戶登錄窗口設(shè)置在首頁上,主要用來接收用戶輸入的用戶名和密碼,并更新用戶在網(wǎng)站中的狀態(tài)信息,運行結(jié)果如圖5所示。首頁主要是根據(jù)保存用戶名信息的Session參數(shù)來判斷用戶是否已經(jīng)登錄,在會員登錄窗口中單擊登錄按鈕后,系統(tǒng)將對用戶名和密碼進行驗證。
4.1.3 購物車模塊
在超市購物,可以根據(jù)自己的需要將很多的物品挑選到購物車(籃)中。而在網(wǎng)上虛擬的購物商城中,通常都會采用一種被稱作“購物車”的技術(shù)來模擬現(xiàn)實生活。這種技術(shù)用起來十分方便,不但可以隨時添加,查看,修改,清空購物車中的內(nèi)容,還可以隨時去收銀臺結(jié)賬。
(1)添加購物車。添加購物車就是把用戶選中的圖書放在購物車中。當用戶在前臺首頁中單擊圖書展示區(qū)的“購買”按鈕時,系統(tǒng)會將該圖書的詳細信息展示在查看物品清單頁中(如圖6所示),用戶在單擊物品清單頁面下方的“放入購物車”鏈接,便可將圖書放入購物車。
(2)查看購物車。為了方便用戶隨時查看購物情況,在網(wǎng)站的首頁加入了查看購物車鏈接,通過它可以將所選物品信息放入購物車中顯示出來。在程序中使用一組文本框記錄用戶購買的圖書數(shù)量,用戶可以在文本框中輸入想要購買的數(shù)量然后單擊修改按鈕。如果要刪除物品,可以在數(shù)量文本框里輸入“0”,并單擊修改按鈕來更新購物車中圖書的數(shù)量。
(3)生成訂單。生成訂單是網(wǎng)上購物商城的最終目的,前面的所有的功能的實現(xiàn)都是為最后生成一個用戶滿意的訂單作基礎(chǔ),在此要生成一個可以供用戶隨時查詢的訂單號,還要保存用戶訂單中所購買的圖書信息。當用戶確認對購物車不再改變后,就可以到收銀臺結(jié)賬并生成訂單。結(jié)賬的流程是:從購物車中讀取圖書名稱、圖書數(shù)量、圖書價格信息,生成唯一的一個訂單號,同時也把用戶注冊的基本信息讀取出來,形成一個完整的訂單寫入數(shù)據(jù)庫中。
4.1.4 訂單查詢模塊
用戶提交訂單后,通常產(chǎn)生的訂單號查詢信息及執(zhí)行狀態(tài)。用戶在網(wǎng)站首頁中單擊“訂單信息”,系統(tǒng)將轉(zhuǎn)到訂單查詢顯示頁面,如圖7所示。
4.2 后臺總體框架
后臺功能只允許具有管理員權(quán)限的用戶使用,它是實現(xiàn)前臺功能的基礎(chǔ)。主要由管理員身份驗證、訂單信息管理模塊、添加圖書模塊、查詢用戶信息管理模塊等組成。網(wǎng)站后臺首頁運行結(jié)果,如圖8所示。
在前臺首頁單擊管理員入口,將轉(zhuǎn)到管理員登錄頁面。該頁面的功能是對管理員身份驗證,用戶輸入用戶名和密碼后單擊“登錄”按鍵,系統(tǒng)將判斷用戶名和密碼的有效性,如果通過驗證則轉(zhuǎn)到后臺首頁,反之則提示錯誤。
另外,管理員可以在后臺單擊導航區(qū)的“添加新圖書”超鏈接來添加新的圖書信息,為了減少錯誤,在提交圖書信息時,需要對數(shù)據(jù)的合法性進行驗證,輸入的圖書價格不能是空字符型,而輸入的圖片只支持Gif格式等,這些任務(wù)可以用Bean來實現(xiàn),也可以用腳本語言Javascript編寫。為了確保信息在數(shù)據(jù)表中的唯一性,在用戶提交表單時,需要先根據(jù)用戶輸入的圖書名稱對數(shù)據(jù)表進行查詢,確保此圖書在數(shù)據(jù)表中不存在后,方可進行添加操作。
值得一提的是,用戶在前臺購物所產(chǎn)生的訂單不能立即執(zhí)行,需要系統(tǒng)管理員在后臺訂單信息管理中審核確認其可執(zhí)行性。用戶單擊導航欄中的“訂單管理”超鏈接進入用戶訂單處理頁面,該頁面顯示近期未被處理的訂單,用戶訂單處理頁面顯示的是用戶的基本信息。要知道訂單中所涉及的圖書,需要單擊對應(yīng)的訂單號的超鏈接打開圖書訂購詳單頁才行。圖書訂購詳單主要通過提交的訂單號從tb-shop表中查詢出對應(yīng)的圖書顯示在頁面中,管理員審核后可通過復選框來設(shè)置訂單是否執(zhí)行。管理員可以在用戶信息模塊完成對注冊用戶的瀏覽及刪除功能。如果用戶蓄意性注冊或在很長的時間內(nèi)沒有訂單生成,管理員就可以將該用戶刪除。單擊導航欄中的“查詢用戶信息”超鏈接進入用戶信息頁面,對于一些失信的用戶只需要單擊右側(cè)的“刪除”超鏈接,即可轉(zhuǎn)到刪除頁面中做刪除處理。
5 結(jié)束語
本文所設(shè)計的網(wǎng)上書店系統(tǒng)基本完成了要求的各項基本功能,但也有一些不完善和亟待改進之處,如安全性能還不完善,缺少必要的數(shù)據(jù)加密系統(tǒng)等,這些功能與技術(shù)將另文討論。網(wǎng)上購物系統(tǒng)無論是在開發(fā)過程中,還是建成后的日常維護過程中,都需要進行嚴格的檢測,以保證購物系統(tǒng)的服務(wù)質(zhì)量。隨著網(wǎng)上購物系統(tǒng)技術(shù)的日趨成熟,網(wǎng)上購物的優(yōu)勢日趨明顯,會有更多的人參與到網(wǎng)上購物的浪潮中來。
主要參考文獻
[1]Phil Hanna.JSP技術(shù)大全[M].北京:機械工業(yè)出版社,2002.
[2]Steven Holzner.Java技術(shù)內(nèi)幕[M].北京:機械工業(yè)出版社,2002.
[3]Karl Moss.Java Servlet開發(fā)人員指南[M].北京:清華大學出版社,2002.
[4]Herbert Schildt,James Holmes.Java編程藝術(shù)[M].鄧勁生,譯.北京:清華大學出版社,2004.