本文通過實戰全程編寫一個購物網站來講解如何使用J2EE來建立企業級的網絡應用!
一、搭建開發平台
本文從實戰出發,所以關於一些概念性的問題就不多講了,首先准備下面的家伙:
1.Oracle
2.weblogic
3.Jbuilder
其它:struts-console-2.2(用作struts視圖開發)PowerBulider(方便數據庫操作)Dreamweaver(美化前台頁面)開發平台為Windows2000。以下以一般性的配置為例詳細介紹搭建J2EE的開發平台。
用機配置:P4賽揚1.7G,256MB 20GHDD 操作系統:Windowsdows2000 SP3
數據庫:Oracle 8i
J2EE應用平台:weblogic 6.1 sp2
EJB,JSP,JavaBEAN開發:Jbuilder 7 weblogic版
第一步,安裝配置Oracle數據庫
安裝Oracle最新版的9i什麼事都沒有,但如果你在P4的機器上裝8i可能就會出現問題,點了安裝之後沒有反應(P4賽揚也存在這個問題)。如果您是P4的機器又要裝8i的話,那麼先按如下方法做。
(1)創建一臨時目錄,並將Oracle8i的安裝源程序拷貝到此目錄。
找到目錄stageComponentsOracle.swd.Jre1.1.7.301DataFilesExpandedJreWindows32bin下的 symcJit.dll 的文件,並改名為 symcJit.old。注意OEM目錄下還有一個symcJit.dll文件要改名。
(2)搜索到oraparam.ini文件,打開它,改變行RE_MEMORY_OPTIONS=-mx48m的參數為 JRE_MEMORY_OPTIONS=-noJit -ms16m -mx32m
(3)其它的參數保持不變。
(4)執行本地硬盤installWindows32setup.exe目錄下的Setup.exe文件。此時調用的是修改過的參數文件oraparam.ini。
(5)安裝時選擇自定義模式,並且不創建數據庫。
(7)Oracle8i安裝完成後,安裝目錄中的下列每一個文件都有需要作相應修改。(如果不修改點任何應用都沒有反應)
assistantsdbcadbassist.cl
assistantsdbmadbmig.cl
assistantsifaifa.cl
binelogin.cl
binowm.cl
ldapoidamdinoidadmin.cl
networktoolsnetasst.cl
networktoolsnetca.cl
owminstallinstelogin.cl
owminstallinstowm.cl
用編輯工具依次打開上述文件,增加參數 -noJit,以dbassist.cl文件為例示意如下:
Command=("C:Program FilesOracleJre1.1.7BINJREW" -noJit -classpath ....)
用相同的方法修改所列出的每一個.cl 文件內容。修改完後運行database administrator下的Database Configuration Assistant就可以創建數據庫了,這可是一個漫長的過程,在創建數據庫時要創建全局標識,搞個好記的就行,以後好配置數據庫連接。創建完後,默認的DBA用戶名為system,密碼為manager。
第二步,安裝配置weblogic 6.1SP2,並連接Oracle
Windows平台的weblogic基本上都可以直接安裝,但要注意不要把它裝到帶有空格的目錄裡如Program Files,或是中文目錄中,默認為c:bea,按默認點下一步,就可以完成安裝,這個基本沒有意外!(最簡單的安裝操作),最後要記住設的管理密碼!為了調試方便,不將weblogic設為自動服務啟動。設定您的管理密碼,進入控制台,啟動服務都需要。為了方便,我將目錄安到了D盤,並將domain改為maxuan,server改為max,接下來我們將配置JDBC連接Oracle數據庫。
首先打開D:beawlserver6.1configmaxuan(maxuan為我改後的名字,默認的為mydomain),用文本編輯器如:記事本或editplus打開startWebLogic.cmd,找到“set PATH=”這一行,加入“.binoci817_8”,如本人的為“set PATH=.bin;.binoci817_8;%PATH%”
為了使啟動weblogic不需要每次都輸入密碼,在“set WLS_PW=”輸入安裝時所設定的密碼即可。
雙擊startWebLogic.cmd或在程序中直接運行Start Default Server啟動weblogic服務(注意不要將這個窗口關了)
啟動weblogic 然後在程序中運行Start Default Console,進入控制台操作,在出現的對話框中輸入管理用戶名system,密碼為你設的密碼即可進入!
點開左邊的Services,你可以看到JDBC;
點開它,點擊在下面的Connection Pools,右邊會出現配置項目,點擊Configure a new JDBC Connection Pool出現配置項,在Configuration下的General標簽下配置:
name:這裡我填寫的是“mytest”;
URL填寫為“Jdbc:weblogic:Oracle”;
Driver Classname:填寫為“weblogic.Jdbc.oci.Driver”;
PropertIEs(key=value):填寫為:
user=system
passWord=manager
server=oradb
這裡的oradb即是所安裝的Oracle所創建的數據庫的全局標識。user和passWord我用的是默認的DBA,你可以用自己創建的用戶名和密碼。點擊Apply按鈕完成。點擊Targets下的Servers標簽,把Available下的Tgets-Server移到Chosen下,然後點Apply按鈕。
接著配置下面的Data Sources,在右邊用“Configure a new JDBC Data Source”創建新的Data Sources,這裡的Name和Pool Name均填上面的設定“mytest”,JNDI Name填寫“oradb”,同上面一樣,點擊Targets下的Servers標簽,把Available下的Targets-Server移到Chosen下,然後點Apply按鈕。
這時點開Start Default Server窗口應當看到已經啟動JDriver/Oracle了!
第三步,安裝配置JBuilder 7
這裡我安裝的是weblogic版。安裝JBuilder不要把它裝到帶有空格的目錄裡如Prograih Files,或是中文目錄中,不然編譯時會出錯的。安裝很簡單,不必多言,這裡著重講一下配置
小技巧一:大家覺得JBuilder運行時也許很慢,因為Jbuilder默認使用32MB內存,如果你的內存夠大的話,可以加大一點,具體辦法如下:
在JBuilder安裝目錄BIN下找到Jbuilder.config文件,編輯它,改變Vmparams 後的參數,啟動JBuilder,在Help下的About Jbuilder下可以看到Java heap已經增加了,運行也快了許多,起碼以後可以編譯較大的文件。
小技巧二:運行JBuilder時,發現編寫代碼很不方便,所選的代碼與實際所見的總是差一個,這是因為字體的原因,解決方法如下,在Tools的Editor Options下的Display裡,將Editor font裡的Font Family改為新宋體即可。
二、配置weblogic服務
用JBuilder可以整合weblogic,這樣可以把在JBuilder下開發的EJB或打包成WAR的網站直接發布到weblogic!
首先在tools下選擇Configure Servers,在下面的user Home下,你可以看到“webLogic Application Server 6.X-7.0”項,點擊它,在右邊會出現Server Settings ,將Enable server打上勾,在下面的General下選擇home directory和Working directory。然後點Custom項,選擇JDK installation directory。
BEA home directory。
接著輸入密碼和設定的Domain name和Server name這些都是你安裝weblogic時設定的,如果目錄選擇正確,在下面的version下會自動出現你的weblogci的版本號。點擊OK即完成!
下面,我們做一個試驗,看看weblogic是不是和Jbuilder整合了!首先,我們新建一個工程,選Application,在name裡填寫你的工程名,接著按完成即可。在新建工程項目時順便看一看Server是不是用的Weblogic
然後再選新建,在出現的ObJect Gallery下選Web,因為我們是要發布WEB應用,所以選取Web Application,為它命個名,這將是網站包的名字,指定它的工作目錄後選擇Generate war,點OK即可。接下來,我們要新建一個JSP文件,一樣點新建,在WEB下選擇JAVAServer Page,按它的默認點下一步即可,它會自動創建一個JavaBEAN。
首先,我們要把自動生成的這個BEAN編譯為class,選中它,點右鍵,在出現的菜單選Rebuild編譯,然後編譯你的Web Application,它會自動生成WAR包,點這個包發布即可發布網站。接下來打開浏覽器輸入 http://127.0.0.1:7001/tds/index.JSP 即可看到該頁面。
三、創建數據庫
Oracle 8i和Oracle 9i確實有些不一樣,不過在界面上區別不大,還是以我的Oracle 8i為例為大家講解一下吧!既然是實戰,首先我們為自己新建一個開發用戶,並創建一個表。在oracle裡創建新用戶和表的方法比較多,只要你有管理員的權限,首先用最簡單的。在Oracle 8i的程序組中啟動DBA Studio程序項,在出現的數據庫鏈接信息中輸入管理用戶名和口令即可,當然,在Oracle中,你可以用用戶名斜槓口令的方法登陸,連接身份選SYSDBA。
創建用戶:在登陸後,單擊安全,在第一項,你就會看到用戶,用右鍵你可以創建新用戶,或者給用戶授於角色,不同的角色擁有不同的權限!Oracle 8i預定義的角色,我在下面會講。
咱們先斷開system的數據庫連接,可以在文件中選擇,也可以用右鍵。然後用我們創建的用戶來登陸,並且在方案中找到表,然後就可以直接創建,由於是圖形可視化,而且又是全中文的,我就不綴述了!大家可以多試試!
用SQLPLUS工具創建用戶和數據庫:在Oracle中可以使用sqlplus這個工具來書寫SQL語句,對於SQL高手來說,這是發揮才能的好地方。咱們來試試吧,首先一樣要先登陸,為了創建新用戶,咱們仍以system來登陸。在主機字符串中填入數據標識(oradb)
在登陸進去後,出現“SQL>”我們就可以在它後面書寫SQL語句,grant connect,resouce to maxuan identifIEd by max,這一句是創建用戶maxuan,口令為max,並賦予connect,resource權限,在出現授權成功後,我們用conn maxuan/max這句來以maxuan連接數據庫,這時的角色已經不是DBA了!接下來的是些基本的SQL建表語句,不用多說了,在sqlplus中,每條語句結束用分號標識,在完成後,我們可以用quit或exit命令斷開。
這裡我說幾個Oracle 8i的預定義角色。
1、CONNECT角色: 授於最終用戶的典型最基本的權利
ALTER SESSION --修改會話
CREATE CLUSTER --建立聚簇
CREATE DATABASE LINK --建立數據庫鏈接
CREATE SEQUENCE --建立序列
CREATE SESSION --建立會話
CREATE SYNONYM --建立同義詞
CREATE VIEW --建立視圖
2、RESOURCE角色: 是授予開發人員的
CREATE CLUSTER --建立聚簇
CREATE PROCEDURE --建立過程
CREATE SEQUENCE --建立序列
CREATE TABLE --建表
CREATE TRIGGER --建立觸發器
CREATE TYPE --建立類型
3、DBA角色:擁有系統所有系統級權限
4、IMP_FULL_DATABASE角色、EXP_FULL_DATABASE角色:
BACKUP ANY TABLE --備份任何表
EXECUTE ANY PROCEDURE --執行任何操作
SELECT ANY TABLE --查詢任何表
5、DELETE_CATALOG_ROLE角色:
授予用戶這個角色,用戶就可以從表sys.aud $中刪除記錄,sys.aud $表中記錄著審計後的記錄,使用這個角色可以簡化審計蹤跡管理。
6、SELECT_CATALOG_ROLE角色、EXECUTE_CATALOG_ROLE角色:
SELECT_CATALOG_ROLE角色具有從數據字典查詢的權利,EXECUTE_CATALOG_ROLE角色具有從數據字典中執行部分過程和函數的權利。
在前面我們掌握了些基本的oracle操作,如創建、授權用戶,創建數據庫等。在OEM(Oracle Enterprise Manager)可視化的窗口環境中,雖然我們也可以很方便地做這些事,但是事實上,用SQL語言書寫在開發上更有效率!Oracle提供的SQL*Plus就是個不錯的工具,如果大家喜歡窗口的開發環境,用SQLPlus Worksheet也行。SQL(Structure Query Language)語言是結構化查詢語言,是數據庫的核心語言,是面向集合的描述性非過程化語言。
SQL語言共分為四大類:數據查詢語言DQL,數據操縱語言DML,數據定義語言DDL,數據庫控制語言DCL。
1、數據查詢語言DQL的基本結構是由select子句,from子句,where子句組成的查詢塊:
select <字段名表>
from <表或視圖名>
where <查詢條件>
2、數據操縱語言DML完成在數據庫中確定、修改、添加、刪除某一數據值的任務(以下是部分常用DML語句):
insert 增加數據行到表
delete 從表中刪除數據行
Update 更改表中數據
3、數據定義語言DDL完成定義數據庫的結構,包括數據庫本身、數據表、目錄、視圖等數據庫元素(以下是部分常用DDL語句)
create table 創建表
create index 創建索引
create vIEw 創建視圖
alter table 增加表列,重定義表列,更改存儲分配
drop table 刪除表
drop index 刪除索引
4、數據庫控制語言DCL用來授予或回收訪問數據庫的某種特權,並控制數據庫操縱事務發生的時間及效果,對數據庫實行監視等。如:
grant 將權限或角色授予用戶或其它角色
revoke 回收用戶權限
roll 回滾,是當某個對話更改了數據庫中的數據後,由於某種原因用戶不想提交此更改時,Oracle所采取的保護操作。這是一個把信息恢復到用戶使update、insert、delete前最後提交的狀態。
commit 提交。在完成數據庫的插入,刪除和修改操作時,只有當事務提交到數據庫才算完成,有提交前只有操作數據庫的本人才能看到,別人只有在最後提交完成才可以看到。接下來,我們在SQL*Plus中實戰一下,為我們下面將要做的打好基礎。用system登陸到SQL*Plus後,我們做如下操作:
SQL>create user maxuan identifIEd by max;
#創建口令為max的用戶maxuan
SQL>grant connect,resource to maxuan;
#為用戶maxuan授權
SQL>conn maxuan/max;
#以用戶maxuan進行連接
L>create table test(a number);
#建立一個名為test的表,
只有字段名為A的一列,數據類型為數字
SQL>insert into test values(1);
#插入一條記錄
SQL>select * from test;
#查詢記錄,此時A列的第一行為1
SQL>update test set a=2;
#更改記錄,此時A列的第一行已改為2
SQL>commit;
#提交
SQL>delete from test;
#刪除test表中所有的記錄,此時test表中沒有記錄
SQL>roll;
#回滾到提交前,
此時再查詢test表,A列第一行值又回復到2
Oracle的數據類型
在數據庫中創建數據表的時候,我們需要定義表中所有字段的類型,數據類型大致分為:character,numberic,date,lob和raw等,這些是最基本的數據類型。當然在Oracle中也允許自定義數據類型。
在Oracle中提供的character數據類型:
char():固定長度字符串,最大長度為2000字節,如果不指定長充,缺省為1個字節長。
varchar2():可變長度的字符串,最大長度為4000字節,具體定義時指明最大長度,這咱類型可以放數字、字母以及ASCII碼字符集(或者EBCDIC等數據庫系統接受的字符集標准)中的所有符號。如果數據長度沒有達到最大值,Oracle會根據數據大小自動調節字段長度。是最長用的數據類型。
nchar():根據字符集而定的固定長度字符串,最大長度2000字節。
nvarchar2():根據字符集而定的可變長度字符串,最大長度4000字節。
long:可變長字符列,最大長度限制為2GB,用於不需要作字符串搜索的長串數據。此類型是一個遺留下來的而且將來不會被支持的數據類型,逐漸被BLOB,CLOB,NCLOB等大的數據類型所取代。
numberic數據類型用來存儲負的和正的整數,分數和浮點型數據,在Oracle中提供的numberic數據類型:
number:可變長的數值列,允許0、正值及負值,m是所有的有效數字的位數,n是小數點以後的位數。
在Oracle中提供的date數據類型:
date:缺省格式是dd-mon-yy(日-月-年)
在Oracle中提供的lob數據類型:blob、clob、nclob:三種大型對象(lob),用來保存較大的圖形文件或帶格式的文本文件,如Word文檔,以及音頻、視頻等非文本文件,最大長充是4GB。暈些數據存儲在數據庫內部保存。
bfile:在數據庫外部保存的大型二進制對象文件,最大長度是4GB,這種外部的LOB類型,通過數據庫記錄變化情況,但是數據的具體保存是在數據庫外部進行的。
在Oracle中提供的raw數據類型:
raw():可變長二進制數據,具體定義字段時必須指明最大長度,這種格式用來保存較小的圖形文件或帶格式的文本文件,它也是一種較老的數據類型,將被lob數據類型所取代。
long raw:可變長二進制數據,最大長度是2GB,可以用來保存較大的圖形或帶格式的文本文件,以及音頻、視頻等非文本文件,這也是一種較老的數據類型,將被lob數據類型所取代。
其它的數據類型:
rowid:這是Oracle數據表中的一個偽例,它是數據表中每行數據內在的唯一標識
integer:整數類型
四、創建購物網站後台數據庫
現在我們回到用J2EE體系開發購物網站的主題,開始實戰建購物網站的後台數據庫。為了實現購物網站的基本的功能,我們需要建立四個表:商品列表(products)、商品類型表(item)、訂單列表(orders)和管理員列表(admin)。表結構如下所示:
item表結構(商品類型表)
字段名稱 數據類型 允許空 主鍵/外鍵 備注
type_id INTEGER(自動編號) 否 主鍵 商品類別ID標記
type varchar2(30) 否 商品類別名稱
product表結構(商品列表)
字段名稱 數據類型 允許空 主鍵/外鍵 備注
product_id INTEGER(自動編號) 否 主鍵 商品ID標記
title varchar2(30) 否 商品名稱
type_id INTEGER 否 外鍵 商品類別標記
info varchar2(80) 是 商品簡介
price number(16,2) 否 商品價格
orders表結構(訂單列表)
字段名稱 數據類型 允許空 主鍵/外鍵 備注
order_id INTEGER(自動編號) 否 主鍵 訂單ID標記
name varchar2(20) 否 顧客姓名
address varchar2(100) 是 發貨地址
tel number(16) 是 聯系電話
email varchar2(30) 否 聯系email
btime date 是 訂購日期
product_id INTEGER 否 外鍵 商品標記
uWord varchar2(100) 是 顧客留言
admin表結構(管理員列表)
字段名稱 數據類型 允許空 主鍵/外鍵 備注
admin_id INTEGER(自動編號) 否 主鍵 管理員ID標記
adminname varchar2(20) 否 管理員名稱
passWord varchar2(20) 否 管理員密碼
設計完表結構後,我們就要開始創建了。創建表我想已經不是什麼難事了,那麼我們要注意的是product、item、orders這三個表之間的關聯,還有自動編號。
下面是完整的SQL語句,在後面我會給出詳細的說明,你可以在SQL*Plus裡對照著輸入,也可以將它存為SQL腳本文件,在SQL*Plus或SQLPlus Worksheet裡執行。當然也可以把代碼直接拷貝到SQL*Plus裡執行!
rem ///BY MAXUAN 開始///
create table item(
type_id integer not null,
type varchar2(30),
constraint item_pk primary key(type_id)
);
create table product(
product_id integer not null,
title varchar2(30) not null,
type_id integer not null,
info varchar2(80),
price number(16,2) not null,
constraint product_pk primary
key (product_id),
constraint product_fk foreign
key(type_id) references item(type_id)
);
create table orders(
order_id integer not null,
name varchar2(20) not null,
address varchar2(100),
tel number(16),
email varchar2(30) not null,
btime date,
product_id integer not null,
uWord varchar2(100),
constraint orders_pk primary
key(order_id),
constraint orders_fk foreign
key(product_id) references product(product_id)
);
create table admin(
admin_id integer not null,
adminname varchar2(20) not null,
passWord varchar2(20) not null,
constraint admin_pk primary key(admin_id)
);
create sequence type_id
increment by 1 start with 1;
create sequence product_id
increment by 1 start with 1;
create sequence order_id
increment by 1 start with 1;
create sequence admin_id
increment by 1 start with 1;
rem ///BY MAXUAN 結束///
說明一:建立表之間的關聯
product、item、orders三個表通過公共域,通常稱為鍵域(Key FIEld)進行關聯,存在兩種類型的鍵:主鍵(Primary key)和外部鍵(Foreign key)。主鍵使表中的數據行保持唯一,在表product中,product_id為主鍵,表orders中也包含有product_id,此時的product_id就是外部鍵。一個表的外部鍵從其它表中獲取信息。
說明二:關於自動編號
在Access中有自動編號的數據類型,MSSQL和MYSQL也都有自動增長的數據類型,插入記錄時不用操作此字段,會自動獲得數據值,而Oracle沒有自動增長的數據類型,我們需要建立一個自動增長的序列號,插入記錄時要把序列號的下一個值賦於此字段,可以預見的是,有此功能,我們可以把數據從Access、MSSQL或MySQL遷移到Oracle了。
create sequence type_id increment
by 1 start with 1;
這句中,type_id為序列號的名稱,每次增長為1,起始序號為1。 好了,咱們的數據庫已經建好了,而且從中也了解到一些基本的相關知識。