摘要:該文分別利用ASP,PHP,JSP這三個(gè)動(dòng)態(tài)網(wǎng)站技術(shù),使用跨Windows和Linux平臺(tái)的同一個(gè)數(shù)據(jù)庫(kù)MySql,采用統(tǒng)一的三種格式的表單界面,借用三種連接數(shù)據(jù)庫(kù)的方法,在三種不同特點(diǎn)的WEB服務(wù)器環(huán)境下,給出了電子商務(wù)網(wǎng)站設(shè)計(jì)中的主要的前臺(tái)和后臺(tái)程序。
關(guān)鍵詞:電子商務(wù)網(wǎng)站;網(wǎng)絡(luò)數(shù)據(jù)庫(kù);服務(wù)器
中圖分類號(hào):TP391文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)32-1278-03
3P Design Technology for the E-commerce Web Platform and Network Database
ZHU Cui-qing
(Jiangsu Teachers University of Technology, Computer Science Engineering, Changzhou 213001, China)
Abstract: This paper use ASP, PHP, JSP three dynamic web technology, the use of Windows and Linux cross-platform with a database MySql, the adoption of uniform format of the three form interface, using three methods of connecting to the database, in three Different characteristics of the WEB server environment, given the design of e-commerce sites the main prospects and background procedures.
Key words: e-commerce web; network databases; server
1 引言
目前動(dòng)態(tài)網(wǎng)站設(shè)計(jì)技術(shù)主要有:利用Perl/C++/Delphi等開(kāi)發(fā)的CGI,兩種有名的API-ISAPI/NSAPI,還有ColdFusion,以及最近幾年流行起來(lái)的3P技術(shù)-ASP,PHP,JSP(據(jù)Internet上有關(guān)網(wǎng)站統(tǒng)計(jì)約有近百種); ASP-Ative Server Page,由微軟公司開(kāi)發(fā) ,是一個(gè)WEB服務(wù)器端的開(kāi)發(fā)環(huán)境,主要采用腳本語(yǔ)言VBScript(或Javascript/perl等)作為自己的開(kāi)發(fā)語(yǔ)言,可用ODBC或直接驅(qū)動(dòng)法訪問(wèn)Window平臺(tái)的數(shù)據(jù)庫(kù)。PHP-Person Server Page ,是由Rasmus個(gè)人創(chuàng)立的一種跨平臺(tái)的服務(wù)器端的嵌入式腳本語(yǔ)言. 它大量地借用C,Java和Perl語(yǔ)言的語(yǔ)法,并耦合PHP自己的特性,是一種很有個(gè)性的網(wǎng)站開(kāi)發(fā)語(yǔ)言,它支持目前絕大多數(shù)數(shù)據(jù)庫(kù)。JSP-Java Server Page , 是Sun公司推出的新一代站點(diǎn)開(kāi)發(fā)語(yǔ)言,Sun 公司除Java 應(yīng)用程序 和 Java Applet 之外,又創(chuàng)立了JSP,其可以在Serverlet和JavaBean的支持下,完成功能強(qiáng)大的站點(diǎn)程序開(kāi)發(fā),特別是有許多訪問(wèn)數(shù)據(jù)庫(kù)的方法。在電子商務(wù)平臺(tái)設(shè)計(jì)中,主要需要解決\"網(wǎng)站結(jié)構(gòu)的設(shè)計(jì)\",\"注冊(cè)界面\",\"交易界面\",\"后臺(tái)數(shù)據(jù)庫(kù)\",以及 \"配套模塊\"諸如購(gòu)物/用戶/論壇/反饋/搜索/會(huì)話等設(shè)計(jì);考慮篇幅,本文只給出統(tǒng)一的前臺(tái)界面及后臺(tái)數(shù)據(jù)庫(kù)的3p設(shè)計(jì)方法;可以說(shuō)ASP,PHP,JSP與網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的操作是電子商務(wù)網(wǎng)站平臺(tái)設(shè)計(jì)的堅(jiān)強(qiáng)基石。
2 構(gòu)建三種設(shè)計(jì)技術(shù)的運(yùn)行環(huán)境
2.1 構(gòu)建ASP的運(yùn)行環(huán)境
在地址欄處輸 http://127.0.0.1:80/default.asp ,若瀏覽到IIS服務(wù)器的ASP歡迎頁(yè)面,說(shuō)明安裝成功。
2.2 構(gòu)建PHP4的運(yùn)行環(huán)境
NT5.0Server, Apache1.3.12 php4.0 安裝支持PHP的web服務(wù)器Apache1.3.12,將Apache服務(wù)器壓縮文件解壓縮,根據(jù)提示進(jìn)行整個(gè)安裝過(guò)程,自己選擇安裝到目錄d:\\apache下。安裝PHP4,將PHP4壓縮文件解壓縮到d:\\php4即可,同時(shí)將其中的php.ini-dist文件拷貝到winnt目錄中,將文件更名為php.ini,打開(kāi)該文件將其中extension_dir 設(shè)置為:d:/php4,并加載擴(kuò)展模塊:將文件中含有;extention=*.dll的各項(xiàng)前面的\";\"號(hào)去掉即可;修改設(shè)置Aphache服務(wù)器,用文本編輯器編輯目錄d:\\aphache目錄下的子目錄conf下名為httpd.conf的文本文件,首先將\"#ServerName *\"這一行下加入\"ServerNamehttp://127.0.0.1/\" ; ,其次將\"Port 80\"改為\"Port 81(或其他與IIS5.0不沖突的端口)\",再其次設(shè)置更改Apache虛擬目錄,將\"Documentroot \"d:/Apache/htdocs\"\"改為Documentroot \"d:/trade\"(該目錄即是電子商務(wù)網(wǎng)站目錄,可用任意方法建立目錄trade),最后加入支持php4的如下語(yǔ)句:ScriptAlias /php4/ \"d:/php4/\" AddType application/x-httpd-php .php AddType application/x-httpd-php .phtml Action application/x-httpd-php4 \"/php4/php.exe\";測(cè)試php:完成上述步驟后,在d:\rade目錄下,用如何文本編輯器,生成擴(kuò)展名為.php(或phtml)的文件test.php,在文件中輸入如下php代碼,存盤后,啟動(dòng)Apache,接著你在瀏覽器中輸入 http://127.0.0.1 :81/test.php,若看到php的版本和擴(kuò)展模塊等信息,說(shuō)明環(huán)境安裝設(shè)置成功。
2.3 構(gòu)建JSP的運(yùn)行環(huán)境
NT5.0Server,Resin1.13, jdk1.3 安裝Java編譯器jdk1.3:運(yùn)行jdk1_3-win.exe,按照提示完成安裝即可,將其安裝在d:\\java1.3目錄,也可安裝在其他目錄。 設(shè)置系統(tǒng)環(huán)境參數(shù):控制面板/系統(tǒng)/環(huán)境頁(yè)中選擇path 參數(shù)加入d:\\jdk1.3\\bin;增加新的環(huán)境參數(shù)classpath=d:\\jdk1.3\\lib\ools.jar;d:\\jdk1.3\\lib\\dt.jar;,然后重新啟動(dòng)計(jì)算機(jī)即可安裝支持JSP的web服務(wù)器Resin1.1.3,將RESIN-1.1.3.zip釋放為d:\\Resin1.1.3 即可。配置服務(wù)器端口,打開(kāi)d:/resin1.1.3/conf/目錄下的resin.conf文件在 8080 標(biāo)簽處將端口設(shè)置為82(在我的NT5.0上裝有三個(gè)服務(wù)器,這樣三個(gè)服務(wù)器的端口分別為IIS :80;Apache:81;Resin:82其實(shí)也可設(shè)置為其他互不沖突的端口號(hào)). 測(cè)試JSP:?jiǎn)?dòng)Resin服務(wù)器,啟動(dòng)瀏覽器,在地址欄處輸 http://127.0.0.1:82/ ,若瀏覽到Resin服務(wù)器的JSP歡迎頁(yè)面,說(shuō)明安裝成功
3 生成三種格式的動(dòng)態(tài)表單頁(yè)面
為了通用,這里采用可能用到的表單對(duì)象為例,至于下面設(shè)計(jì)具體數(shù)據(jù)表用到的字段,只要轉(zhuǎn)成給出的表單域相應(yīng)對(duì)象即可。
1) 用ASP動(dòng)態(tài)生成與數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交流的操作表單: form.asp: 生成表單域頭: 生成普通文本: 生成密碼文本: 生成滾動(dòng)文本: 生成單選: 生成復(fù)選: 生成列表框: 生成提交按鈕 生成重填按鈕 生成表單域尾。
2) 用PHP動(dòng)態(tài)生成與數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交流的操作表單: form.php 生成表單域頭:\"?> 生成普通文本:\"?> 生成密碼文本:\"?> 生成滾動(dòng)文本:\"?> 生成單選:\"?> 生成復(fù)選:\"?> 生成列表框:網(wǎng)絡(luò)數(shù)據(jù)庫(kù)Asp技術(shù)Php技術(shù)Jsp技術(shù)網(wǎng)站設(shè)計(jì) \"?> 生成提交按鈕 \"?> 生成重填按鈕\"?> 生成表單域尾\"?>
3) 用JSP動(dòng)態(tài)生成與數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交流的操作表單 form.jsp 生成表單域頭: 生成普通文本: 生成密碼文本: 生成滾動(dòng)文本: 生成單選: 生成復(fù)選: 生成列表框: 生成提交按鈕 生成重填按鈕 生成表單域尾。
4 設(shè)計(jì)用于存儲(chǔ)商務(wù)網(wǎng)站交互數(shù)據(jù)的MySql數(shù)據(jù)庫(kù)
4.1 啟動(dòng)MySql數(shù)據(jù)庫(kù)服務(wù)器
可在NT5.0下用啟動(dòng)服務(wù)法/NET命令法/命令窗口鍵入MySqld-shareware法,啟動(dòng)MySql數(shù)據(jù)庫(kù)服務(wù)器,啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器后,在d:\\mysql\\bin>提示符下鍵入mysql-h 127.0.0.1 -u root 即可出現(xiàn)mysql>提示符,從這開(kāi)始即可進(jìn)行對(duì)MySql數(shù)據(jù)庫(kù)的各種操作。若要退出可鍵入quit/exit,若要關(guān)閉數(shù)據(jù)庫(kù)服務(wù)器,可在d:\\mysql\\bin>提示符下鍵mysqladmin -u root shutdown。
4.2 建立MySql數(shù)據(jù)庫(kù)表
這里以商務(wù)網(wǎng)站中常用的幾種數(shù)據(jù)表為例,主要用到的數(shù)據(jù)表和生成數(shù)據(jù)表的SQL代碼如下:(這里的數(shù)據(jù)表字段只要分別對(duì)應(yīng)上述表單域?qū)ο蠹纯蓪?shí)際操作,數(shù)據(jù)表統(tǒng)一用tablename表示) 客戶登錄管理數(shù)據(jù)表 CREATE TABLE users ( ID int not 1 auto_increment, UserName varchar(30) not 1, Password varchar(20) not 1 ) 客戶信息數(shù)據(jù)表 CREATE TABLE usermessage ( UserName varchar(30) not 1, Email varchar(80) not 1, Address varchar(120) not 1 , Fax varchar(40) 1, Phone varchar(40) not 1, Cerreycard varchar(50) not 1 ) 客戶定購(gòu)商品數(shù)據(jù)表 CREATE TABLE catalog ( ProductId int not 1 , Name varchar(64) not 1, Price float(6,2) not 1, Description ;text 1 )。
5 設(shè)計(jì)處理表單數(shù)據(jù)的3p程序
5.1 設(shè)計(jì)處理表單數(shù)據(jù)的ASP程序
form_cl.asp 建立與數(shù)據(jù)庫(kù)的連接:這里采用直接驅(qū)法 Set conn = Server.CreateObject(\"ADODB.Connection\"); conn.open \"driver={MySQL};server=localhost;uid=user;pwd=xxxxxx;database=tradedb\" 獲取表單提交的數(shù)據(jù):data1=request(\"ptwbk\"),data2=request(\"mmwbk\"),data3=request(\"gdwbk\") ,data4=request(\"dxk\");data5=request(\"fxk\");data6=request(\"lbk\") 用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作 查詢數(shù)據(jù)記錄: sql=\"select * from tablename\" ;set rs=conn.execute(sql) \" 增加數(shù)據(jù)記錄: sql=\"insert into tablename(ptwbk,mmwbk,gdwbk,dxk,fxk,lbk) values('data1','data2','data3','data4','data5', 'data5')\";set rs=conn.execute(sql) 更改某條數(shù)據(jù)記錄: sql=\"update tablename set data1=\"request(ptwbk )\", where ID=\"num\"; set rs=conn.execute(sql) 刪除某條數(shù)據(jù)記錄: sql=\"delete from tablename where ID=\"num\";set rs=conn.execute(sql) 將SQL語(yǔ)句處理的數(shù)據(jù)結(jié)果輸出 Response.Write \"
\" Response.Write \" \" For i=0 to rs.Fields.Count-1 Response.WRITE \" \" rs.Fields(i).Name \" \" Next Response.Write \" \" While Not rs.EOF Response.Write \" \" For i=0 to rs.Fields.Count-1 Response.WRITE \" \" rs.Fields(i).Value \" \" Next Response.Write \"
\" rs.MoveNext Wend Response.Write \" \" 關(guān)閉數(shù)據(jù)庫(kù): rs.close;conn.Close
5.2 設(shè)計(jì)處理表單數(shù)據(jù)的PHP程序
form_cl.php 建立與數(shù)據(jù)庫(kù)的連接:這里采用PHP的MySql函數(shù)法(也可用ODBC函數(shù)法)
$conn=odbc_connect(\"localhost\",\"user\",\"xxxxxx\");選擇數(shù)據(jù)庫(kù):mysql_select_db(\"tradedb\",\"$conn\"); 獲取表單提交的數(shù)據(jù): $data1=$ptwbk; $data2=$mmwbk; $data3=$gdwbk; $data4=$dxk; $data5=$fxk; $data6=$lbk;
用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作:
查詢數(shù)據(jù)記錄: $sql=\"select * from tablename\" ;$result=odbc_do($conn,$sql)
插入數(shù)據(jù)記錄:$sql=\"insertintotablename(ptwbk,mmwbk,gdwbk,dxk,fxk,lbk)values('$data1','$data2','$data3','$data4','$data5','$data6')\";$result=odbc_do($conn,$sql);
更改某條數(shù)據(jù)記錄: $sql=\"updatetablename set$data1=ptwbk where ID=num\" $result=odbc_do($conn,$sql);
刪除某條數(shù)據(jù)記錄:$sql=\"delete from tablenamewhereID=num\";$result= odbc_do
($conn,$sql);
將SQL語(yǔ)句處理的數(shù)據(jù)結(jié)果輸出 odbc_result_all($result,\"border=1\");
關(guān)3閉數(shù)據(jù)庫(kù): odbc_close($conn);
5.3 設(shè)計(jì)處理表單數(shù)據(jù)的JSP程序
form_cl.jsp 建立與數(shù)據(jù)庫(kù)的連接:這里采用JDBC-ODBC橋生成JavaBean法 創(chuàng)建一個(gè)JavaBean命名為conndb.java,并保存在d:/resin1.1.3/doc/web-inf/classes/trade目錄下,代碼如下:(限于篇幅這里沒(méi)按標(biāo)準(zhǔn)書寫,而采用不換行寫法,其他類同) package trade; import java.sql.*; public class conndb { String url=\"jdbc:inetdae:localhost\";String login=\"user\"; String password = \"xxxxxx\"; String sDBDriver = \"sun.jdbc.odbc.JdbcOdbcDriver\";String sConnStr = \"jdbc:odbc:Dsnmysql\"; Connectionconn=1;ResultSetrs=1;publicconndb(){try{Class.forName(sDBDriver);Connection,conn=DriverManager.getConnection(url,login,password);}catch(java.lang.ClassNotFoundExceptione){System.err.println(\"conndb():\"+e.getMessage());}}Public/ResultSet/executeQuery(String/sql)/{rs=1;try{conn=DriverManager.getConnection(sConnStr); Statementstmt=conn.createStatement();rs=stmt.executeQuery(sql);} catch(SQLException ex) {System.err.println(\"aq.executeQuery: \" + ex.getMessage());} return rs; }} 然后用javac編譯conndb.java生成與其同目錄的conndb.class文件,在form_cl.jsp文件中加入如下標(biāo)簽即可建立與數(shù)據(jù)庫(kù)的連接 獲去表單提交的數(shù)據(jù): String data1=request.getParameter(\"ptwbk\"); String data2=request.getParameter(\"mmwbk \") String data3=request.getParameter(\"gdwbk \") String data4=request.getParameter(\"dxk \") String data5=request.getParameter(\"fxk \") String data5=request.getParameter(\"lbk \") 語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作 查詢數(shù)據(jù)記錄: String sql=\"select * from tab lename\"; connbean.executeQuery(sql); 增加數(shù)據(jù)記錄: String sql=\"insert into tablename values('\" + data1 + \"','\" +data2 +\"','\" +data3 + \"','\" + data4+ \"'+\"','\" + data5+\"','\" + data6+'\")\";connbean.executeQuery(sql); 更改某條數(shù)據(jù)記錄: String sql=\"update tablename set data1='\" + ptwbk + \"',data2='\" + mmvbk + \"',data3='\" +gdwbk + \"' where ID='\" + num + \"'\" ;connbean.executeQuery(sql) 刪除某條數(shù)據(jù)記錄: String sql=\"delete from tablename where ID='\" +num+ \"'\" ; connbean.executeQuery(sql);;將SQL語(yǔ)句處理的數(shù)據(jù)結(jié)果輸出 ResultSet rs = connbean.executeQuery(sql); While (rs.next()) {out.print(\"
\"+rs.getString(\"ptwbk\")+\" \");out.print(\" \"+ rs.getString(\"mmvbk\") + \" \");out.print(\" \" + rs.getString(\"gdwbk\") + \" \"); out.print(\" \" + rs.getString(\"dxk\") + \" \");out.print(\"
\" + rs.getString(\"fxk\") + \" \");out.print(\" \" + rs.getString(\"lbk\") + \" \");} 關(guān)閉數(shù)據(jù)庫(kù): rs.close();
6 三種電子商務(wù)網(wǎng)站設(shè)計(jì)技術(shù)綜述
1)連接數(shù)據(jù)庫(kù)的方法: 通過(guò)上述操作可看出,本文采用了三種操作MySql數(shù)據(jù)庫(kù)的方法,Asp采用直接驅(qū)動(dòng)法,Php采用MySql函數(shù)法,Jsp采用JDBC-ODBC/JavaBean法。
2)網(wǎng)站結(jié)構(gòu)設(shè)計(jì):考慮篇幅,本文只給出了Widows平臺(tái)上,電子商務(wù)網(wǎng)站設(shè)計(jì)中的主要環(huán)節(jié)的代碼設(shè)計(jì),對(duì)于Linux平臺(tái)、網(wǎng)站結(jié)構(gòu)、各個(gè)功能模塊設(shè)計(jì)等論題,作者已經(jīng)有兩篇這方面的論文在核心刊物上待發(fā)表,這里不便公開(kāi)。
3)可操作的主要數(shù)據(jù)庫(kù):上述三種動(dòng)態(tài)技術(shù)操作數(shù)據(jù)庫(kù)的方法,可操作Windows平臺(tái)上的Access/MsSql/Foxpro/Informix/Oracle等數(shù)據(jù)庫(kù),對(duì)Php和Jsp可操作Linux平臺(tái)上的數(shù)據(jù)庫(kù)Postgres/Sybase/Oracle等。
4)平臺(tái)與代碼通用性:上述設(shè)計(jì)方法采用的是通用代碼方式,對(duì)PHP和JSP大部分代碼即可運(yùn)行于Windows,又可運(yùn)行于Linux;考慮MySql的許多方便的特點(diǎn),本文以此為例,做了一些有益的工作。
參考文獻(xiàn):
[1] 汪曉平.ASP網(wǎng)絡(luò)開(kāi)發(fā)技術(shù)[M].北京:人民郵電出版社,2000.
[2] Atkinson L.PHP核心編程[M].北京:清華大學(xué)出版社,2000.
[3] 石振國(guó).多媒體通信網(wǎng)頁(yè)的Java設(shè)計(jì)技術(shù)[M].北京:清華大學(xué)出版社,2000.