|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2004-09-19, 10:38 AM | #1 (permalink) |
榮譽會員
|
用JBuilderX開發WEB應用程式
Borland公司的JBuilder是世界領先的Java開發環境。目前最新版本JbuilderX是一個開發企業級Java套用的綜合性跨平台環境,它在使JBuilder屢獲殊榮的效能上,增加了很多新的特性,從而成為目前最強大的 Java可視化開發環境。本文將通過一個簡單的WEB項目,使您快速進入JBuilderX的殿堂。
JBuilderX的功能極其豐富,本文不會也不可能面面俱到地介紹所有的功能,只會對涉及例子項目開發的一些容易忽視或不容易掌握的功能展開介紹,而對一些一般的功能將一點而過,或不提及,相信您可以在項目開發操作程序中自然掌握那些基本的功能。您也可以通過JBuilderX在線說明 我的文件來瞭解和掌握這些內容,推薦您閱讀help->JBuilder toturials中前4個基礎教學。 項目介紹 雖然JBuilderX可以用於開發桌面、無線、applet等應用程式,但80%以上的使用者用它開發J2EE的WEB應用程式,所以我設計了一個簡單的WEB套用項目,亦步亦趨地帶領您開發出一個可以執行的WEB應用程式。 這個WEB項目只包含一個用戶登入的功能,其系統框圖如下: 圖1. 系統框圖 其中web套用伺服器為tomcat4.1,資料庫伺服器為oracle10g。 這個項目包括以下內容: 1) 用戶表T_USER:用於儲存用戶的資訊 2) 登入頁面login.htm:讓用戶錄入用戶名和密碼 3) 用戶資訊javaBean類UserBean:包括三個內容,即用戶ID和用戶密碼及用戶名 4) 獲取資料庫連接類DSBean:獲取資料庫連接,以便操作資料庫 5) 用戶登入處理頁面execute.jsp:將用戶id,用戶密碼和資料庫中的比較,產生結果頁面 6) 異常處理頁面error.jsp:當發生異常時轉入異常處理頁面,顯示人性化的錯誤資訊 項目中各項部分的協作關係如下圖: 圖2. 系統中各部分的協作關係 建資料庫 首先以system用戶登入oracle資料庫,新增資料庫用戶: create user test identified by test;grant connect,resource to test; 用戶資訊表T_USER,該包括三個字段,其表的結構如下: 字段名 檔案類型 註釋 user_ID varchar2(10) 用戶ID user_name varchar2(20) 用戶名 password varchar2(30) 用戶密碼 以test用戶登入資料庫,執行以下語句SQL,新增用戶資訊表: create table T_USER ( USER_ID VARCHAR2 (10) PRIMARY KEY, USER_NAME VARCHAR2(20), PASSWORD VARCHAR2(30))/ 往表中插入兩條用戶資訊: insert into T_USER values(『zhangshang』,』張三』,』123456』);insert into T_USER values(『lisi』,』李四』,』abc』);commit; 新增項目工程 新增工程:File->New Project出現下面的界面: 圖3. 新增項目工程 項目取名為loginPro,放置在D:/loginPro路徑中,一路按Next就可以了。 新增完項目工程後,在工程下新增一個Web模組:File->New...->左邊樹選項Web->雙按右邊視窗的Web Module(WAR)項目->在彈出的視窗中點選Create empty Web Module,按Next->在彈出的視窗中按以下設定: 圖4. 設定web模組路徑和技術標準 web模組的名稱為loginWeb,放置在項目路徑下的loginWeb子資料夾中,設定Servlet和JSP的版本。在設定完後直接點擊Finish完成Web模組的新增。 特別提醒讀者,如果您開發的是Web項目,一定要新增Web模組,只有這樣,在工程中開發的Java類在Rebuild後,JBuilderX才會使用Ant工具,將編譯後的class文件同步到web模組的WEB-INF目錄中。筆者曾經有一個朋友向我報怨說用JBuilder開發WEB程序很麻煩,原來他沒有在工程中新增Web模組,每次更改類後,都不辭辛苦地將編譯後的類手工拷到到WEB套用的WEB-INF\classes目錄下,殊不知,金光大道已經開通,而自己還在羊腸小道裡掙扎。 編寫類 本項目中包括兩個類,一個是用戶資訊類UserBean.java,另一個是獲取資料庫連接類DSBean.java。下面我們來編寫這兩個類: 首先編寫UserBean.java類:File->New Class...彈出如下的視窗: 圖5. 編寫類嚮導 在類嚮導的視窗界面上錄入類的名字UserBean,包名預設的是項目的名稱,您可以更改其他更用意義的包名,我們簡單地接受預設的包名。按OK後,在編輯視窗中得到如下的類程式碼: package loginpro;public class UserBean { public UserBean() { }} 下面我們給UserBean類增加3個內容:在UserBean的編輯視窗的底部點擊Bean標籤頁->選項Bean標籤下的Properties的子標籤頁->在Properties頁面中通過Add Property來增加類的內容,點擊該按鈕彈出內容視窗->在此視窗中增加內容。 不過筆者以為這種一般的給類增加內容的方法比較笨拙,效率很低,您可以直接通過在類中按鍵輸入全局變數,然後再按上面的步驟切換到Properties標籤頁,JBuilderX會自動將全局變數列在這個頁面中,通過鉤選Getter和Setter列中的複選框,變數的set和get方法就自動產生了,筆者在編寫程序的時候選項採用這種方法。增加全局變數後,UserBean程式碼如下(其中粗體紅色為新增的程式碼,下同): package loginpro;public class UserBean { private String userID; private String userName; private String password; public UserBean() { } } 切換到Properties頁面,鉤選所有的Getter和Setter 切換回程式碼頁面後,內容的get和set方法都自動產生了: ... public class UserBean { ... public String getPassword() { return password; } public String getUserID() { return userID; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public void setUserID(String userID) { this.userID = userID; } public void setPassword(String password) { this.password = password; } } 編寫好UserBean後我們再來編寫獲取資料連接的DSBean,在編寫這個類之前,因為該類需要用到Oracle的JDBC包,所以我們需要將oracle JDBC的jar包載入到類庫中,再將其引入項目工程裡。 |
送花文章: 3,
|
2004-09-19, 10:41 AM | #2 (permalink) |
榮譽會員
|
目前oracle最新的版本是oracle10g,如果您安裝了oracle10g,則JDBC包位於[ORACLE_HOME]\jdbc\lib\classes12.jar,如果您未安排資料庫,您可以到這兒下載JDBC驅動包,它是向下相容的。假設我們已經將其下載到D:\extra目錄中,我們通過以下操作將其載入到JBuilderX的類庫中:Tools->點擊Configure Libraries彈出Configure Libraries視窗,如圖6,首先點擊Configure Libraries視窗左下方的New...彈出New Library Wizard視窗,在視窗中給該類取一個名字叫jdbcLib,再點擊該視窗的Add...按鈕彈出Select One or More Directories視窗,定位到D:\extra目錄,選取class12.jar,然後驗證即可。
圖6. 增加新類到JBuilderX類庫中 接下來我們需要在項目中引用類庫中這個新的jar包,這樣項目才可以訪問這個JDBC的jar包:Project->Project Properties在彈出的視窗左邊的樹中選項Paths,按照圖7的操作完成引用的工作: 圖7. 增加jdbc的jar包到項目中 需要指出的是,如果項目需要引用大量的外部jar包,則可以將這些jar包組織到一個目錄下,然後將整個目錄加入到類庫,在項目工程中引用該目錄對應的類庫名就可以在項目中使用這些包了。當Rebuild項目時,JBuilderX還會將這些包同步到WEB套用的目錄中。 現在萬事俱備了,我們開始編寫DSBean.java: package loginpro; import java.sql.*; public class DSBean { public static Connection getConnection() throws SQLException { try { Class.forName("oracle.jdbc.driver.OracleDriver"); }catch (ClassNotFoundException ex) { System.out.println("資料庫驅動程式沒有找到。"); } return DriverManager.getConnection("jdbcracle:thin:@192.168.0.189:1521ra9i", "test", "test"); } } 我的資料庫裝在IP為192.168.0.189的電腦上,資料庫的SID是ora9i,讀者在編寫時必鬚根據您的資料庫的具體情況作相應的更改。 編寫完這兩個類後,我們可以在項目工程面板中右擊loginPro.jpx,選項Rebuild,來編譯這兩個類,編譯完後的類不但會輸出到D:\loginPro\classes目錄下,同時還將同步到D:\loginPro\loginWeb\WEB-INF\classes目錄中,並且將會將項目中引用的外部包拷貝一份到D:\loginPro\loginWeb\WEB-INF\lib目錄下。值得注意的是,如果用Make指令來編譯,則類只會輸出到D:\loginPro\classes中,而不會同步到D:\loginPro\loginWeb\WEB-INF\classes目錄。對J2EE的web目錄結構的探討超越本文內容,請自行閱讀相關資料。 登入頁面和處理頁面 編寫用戶登入的頁面login.htm:File->New File...彈出以下對話視窗: 圖8. 新增login.htm 在編輯視窗按鍵輸入以下的頁面程式碼: <html> <body> <form name="form1" method="post" action="execute.jsp"> <input type="text" name="userID"> <input type="text" name="password"> <input type="submit" name="Submit" value="提交"> </form> </body> </html> 該登入頁面接受用戶輸入的用戶id和密碼,提交給execute.jsp頁面處理,下面我們來編寫execute.jsp:File->New...->在Object Gallery視窗中左邊的樹中選項Web->在右邊視窗中雙按JavaServer Page圖示將彈出如下的對話視窗: 圖9. JSP頁面嚮導 在該對話視窗中的Name中按鍵輸入JSP頁面的名字:execute,點擊Next,在彈出的頁面中再點擊Next,進入嚮導的第3步,在這步中,允許您設定頁面引用的JavaBean: 圖10. 設定JSP頁面引用的JavaBean 點擊OK後,loginpro.UserBean類被定義為該頁面的一個JavaBean,其id預設名為bean0,我們將其改為userBean,列表中還允許您指定這個JavaBean的作用域,我們選項session。直接點擊Finish得到execute.jsp文件的程式碼: <%@ page contentType="text/html; charset=GBK" %> <html> <head> <title>execute</title> </head> <jsp:useBean id="userBean" scope="session" class="loginpro.UserBean" /> <jsp:setProperty name="userBean" property="*" /> <body bgcolor="#ffffff"> </body> </html> 需要指出的是<jsp:setProperty name="userBean" property="*" />以參數名匹配的方式接收客戶端傳送過來的參數值,在這裡,當login.htm提交後userBean的userID和password兩個將被設定為login.htm頁面表單中兩個輸入框的值。 接收到客戶端的值後,程序將其和資料庫中T_USER表中的記錄作比較,以便查明是否是合法用戶,現在我們給execute.jsp增加程式碼,完成這些處理工作: <%@ page contentType="text/html; charset=GBK" errorPage="error.jsp"%> <%@ page import="java.sql.*"%> <%@ page import="loginpro.DSBean"%> <html> <head> ... <jsp:setProperty name="userBean" property="*" /> <body bgcolor="#ffffff"> <% Connection conn = DSBean.getConnection(); String sqlStr = "select count(*) from T_USER where USER_ID=? and password=?"; PreparedStatement pStat = conn.prepareStatement(sqlStr); pStat.setString(1,userBean.getUserID()); pStat.setString(2,userBean.getPassword()); ResultSet rs = pStat.executeQuery(); if(rs.next() && rs.getInt(1) == 1) out.print("您是合法的用戶,歡迎您的到來!"); else out.print("密碼不對,或者您還沒有註冊為系統的用戶"); %> <body bgcolor="#ffffff">... 我們只是簡單地將userID和password的值傳送到資料庫中進行比較,在真正的套用中,一定事先要檢查userID和password的值是否有單引號(』),如果有,必須將其轉換成兩個單引號(『』),否則將產生安全漏洞問題,有興趣的朋友可以在網上尋找相關資料。 最後的一個JSP是處理錯誤和異常的error.jsp,它的程式碼如下: <%@ page contentType="text/html; charset=GBK" isErrorPage="true" %> <%@ page import="java.sql.SQLException"%> <html> <head> <title>error</title> </head><body bgcolor="#ffffff"> <% if( exception instanceof SQLException ) out.println("發生了資料庫操作異常,請和系統管理員聯繫"); else out.println("發生了不可知的異常,請和系統管理員聯繫"); %> </body> </html> 當execute.jsp發現資料庫操作或其他的異常時,將會跳轉到該錯誤處理頁面,列印出可讀性強的錯誤資訊。 由於JBuilderX對頁面可視化的支持不強,您也可以在Dreamweaver中完成HTML及JSP可視化內容的開發,而在JBuilderX中完成邏輯處理部分的開發,畢竟這個世界永遠需要協作。 |
送花文章: 3,
|
2004-09-19, 10:44 AM | #3 (permalink) |
榮譽會員
|
在JBuilderX中執行WEB程序
至此我們已經完成了項目中所有程式的開發工作,下面我們將在JBuilderX中執行該WEB程序。在執行程序之前,必須保證已經設定了WEB伺服器。 Project->Project Properties...->在彈出視窗左邊樹中設定Server: 在Single Server for all services in project選項裡選項Tomcat4.1,其預設的設定是Tomcat4.0。 如果您給JBuilderX組態了其他的WEB伺服器,如WebSphere或WebLogic,它們都會列在該下拉框中。 但是,我將不擬對此展開討論,一個主要原因是,雖然JBuilderX允許您在開發環境中設定並執行這些服務,但由於這些重量級的WEB服務開啟或關閉都需要很長的時間,給測試帶來了很大的不便。 所以我們一般的作法是先在輕量級的WEB服務(一般是Tomcat中)中完成測試,再將其佈署到真正的企業級WEB伺服器中去。 更進一步,我們將不在JBuilderX中執行Tomcat測試,而是通過外部的Tomcat來測試,否則當JBuilderX開啟測試的WEB服務後會給更改程序帶來了不便。 關於tomcat組態討論已經超出了本文範圍,有興趣的朋友可以自行研究。為了簡單,本文將在JBuilderX環境中完成測試。 在編輯視窗中滑鼠右擊login.htm的標籤,選項Web Run using 「execute」: 圖11. 執行WEB服務 JBuilderX將自動完成WEB配置資訊的設定並在8080連接阜啟動WEB服務,login.htm登入頁面展示出來接受用戶的錄入,我們以zhangshang/123456登入: 圖12. 用戶登入 如果此時資料庫還沒有啟動則execute.jsp轉到error.jsp,錯誤頁面輸出以下內容: 圖13. 錯誤頁面 在保證資料庫啟動及連接正常後,將得到正確登入的頁面: http://www.yesky.com/image20010518/149223.jpg 圖14. 登入成功的頁面 您也可以啟動IE,在IE的位址欄中按鍵輸入正確的位址來執行程序。 |
送花文章: 3,
|
2004-09-19, 10:45 AM | #4 (permalink) |
榮譽會員
|
一些一般問題的解決方法
在使用JBuilderX開發項目程序中,您可能會碰到一些小麻煩,在這裡我將介紹兩個一般的經常影響開發者情緒的問題及其解決方法。 1、編輯界面不支持中文:您在編輯界面中按鍵輸入的中文會變成一串不可識別的「口口口」,這個問題好像只出現在JBuilderX版本中,但也不一定會在每台電腦上都發生。有一次,我的桓鐾疙L腏BuilderX就發生了這種情況,後來我幫其更改了JBuilderX的組態文件C:\Documents and Settings\Administrator\.primetimeX\user_zh.properties中的設定資訊,才解決了這個問題,具體解決方法,您可以參考borland網站的這篇文章。 2、 游標錯位:這個問題是JBuilder開發工具的一個頑疾,每個JBuilder版本都存在這個問題(borland這種抱殘守缺,矢志不移的精神讓我納悶,同時也很敬佩)。解決的方法很簡單,對於低版本的JBuilder您可能將字體設定為細明體就可以了,但在JBuilderX中,字體選項下拉框中只列出兩種字體:Courier New和Lucida Sans Typewriter,沒有細明體,這是一個bug。但我們可能通過其它方法來曲線救國:Tools->Perferences...->點擊彈出視窗左邊的Color在右邊視窗的設定界面中列出了Java,HTML/XML,JSP及其他格式文件的編寫樣式,去除所有粗體格式的設定: 圖15. 設定程式碼格式 如圖15,您可以在界面的右下角的編輯框中點選加粗的語句,然後取消Bold前面複選框的鉤。這樣就沒有游標錯位的問題了。 總結 Jbuilder之所以如此流行的原因是顯而易見的。由於其程式碼編輯的品質和開發者效率的特點,Borland作為開發者和資料庫工具供應商的聲譽異常顯赫。Borland主導著IDE市場。JavaPro和DevX的研究表明,Jbuilder一直是Java開發者最普遍採用的,並且大大超過其它同類產品的採用率。 本文以開發一個簡單的例子為主線,向您介紹了用JBuilderX開發WEB項目的方方面面,並且適時地指出了開發中的一些實戰經驗和一些一般的問題。建議您在讀完本文後,自己再試著在JBuilderX環境中重複開發這個例子,畢竟紙上得來終覺淺,絕知此事要躬行。 |
送花文章: 3,
|