基于Struts+Spring+JDBC架構的課程設計實訓教學示例項目——《網上銀行賬戶管理系統(tǒng)》——構建項目數據庫連接組件和測試(第2部分)_第1頁
基于Struts+Spring+JDBC架構的課程設計實訓教學示例項目——《網上銀行賬戶管理系統(tǒng)》——構建項目數據庫連接組件和測試(第2部分)_第2頁
基于Struts+Spring+JDBC架構的課程設計實訓教學示例項目——《網上銀行賬戶管理系統(tǒng)》——構建項目數據庫連接組件和測試(第2部分)_第3頁
基于Struts+Spring+JDBC架構的課程設計實訓教學示例項目——《網上銀行賬戶管理系統(tǒng)》——構建項目數據庫連接組件和測試(第2部分)_第4頁
基于Struts+Spring+JDBC架構的課程設計實訓教學示例項目——《網上銀行賬戶管理系統(tǒng)》——構建項目數據庫連接組件和測試(第2部分)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于Struts+Spring+JDBC架構的課程設計實訓教學例如工程?網上銀行賬戶管理系統(tǒng)?構建工程數據庫連接組件和測試第2/6局部1.1.1 別離持久層中的數據庫連接組件中的與環(huán)境有關的參數1、添加一個屬性配置文件 或者XML文件1為什么要采用配置文件?1) 作用是什么?-靈活地滿足變化!2) 是采用*.properties還是*.xml格式3) 如何對配置文件中的工程進行讀寫?-利用類利用該配置文件,封裝系統(tǒng)中的各個“可變的工作參數也就是“策略模式中的“環(huán)境。2在工程中添加屬性配置文件 3目前的內容如下連接MS SQLServer2000的數據庫系統(tǒng)、MySQL數據庫等 JDBC_DSN

2、_URL = jdbc:jtds:sqlserver:/:1433/webbank JDBC_dbUserName =sa JDBC_dbUserPassWord =1234 JDBC_dbcp_maxActive =10JDBC_DSN_URL = jdbc:mysql:/localhost:3306/webbankJDBC_dbUserName=rootJDBC_dbUserPassWord=rootJDBC_dbcp_maxActive=10JDBC_DSN_URL = jdbc:odbc:webbankDSNJDBC_dbUserName=rootJDBC_dbUse

3、rPassWord=rootJDBC_dbcp_maxActive=10注意:也可以采用XML形式的配置文件。2、添加一個獲得配置屬性的ClassNameConfig類也就是策略模式中的環(huán)境類Context1包名稱為2內容如下package com.px1987.webbank.config;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;im

4、port java.util.Properties;import com.px1987.webbank.exception.WebBankException;public class ClassNameConfig public ClassNameConfig()throws WebBankException static Properties oneProperties=null;/?staticoneProperties=new Properties();InputStream propertiesFileStream=ClassNameConfig.class.getResourceAs

5、Stream(/classNameCperties);try oneProperties.load(propertiesFileStream); catch (IOException e) intln(在加載屬性文件時程序出現了異常錯誤!);public static String getProperty (String propertiesName)return oneProperties.getProperty(propertiesName);public static void setProperty (String propertiesName,String prop

6、ertiesValue)oneProperties.put(propertiesName, propertiesValue);public void savePropertiesItem(String propertiesFileName)throws WebBankExceptionOutputStream propertiesFileStream=null;try propertiesFileStream = new FileOutputStream(propertiesFileName); catch (FileNotFoundException e) throw new WebBank

7、Exception(在保存屬性文件時程序出現了異常錯誤!);try oneProperties.store(propertiesFileStream, 這是修改后的屬性文件內容); catch (IOException e) throw new WebBankException(在保存屬性文件時程序出現了異常錯誤!);public void savePropertiesItemToXML(String xmlPropertiesFileName)throws WebBankExceptionOutputStream propertiesFileStream=null;try propertie

8、sFileStream = new FileOutputStream(xmlPropertiesFileName); catch (FileNotFoundException e1) throw new WebBankException(在保存屬性文件時程序出現了異常錯誤!);try oneProperties.storeToXML(propertiesFileStream, 這是修改后的屬性文件內容,gb2312); catch (IOException e) throw new WebBankException(在保存屬性文件時程序出現了異常錯誤!);3注意的問題1) 其中的“privat

9、e static Properties props=null;為什么要設計為static ?到達全局緩存2) static語句塊是在什么時候執(zhí)行?3) static語句塊也能夠產生一種“單例單一對象,也就是單例設計模式的效果可以參考Hibernate框架所提供的HibernateUtil.java類代碼4Class類中的getResourceAsStream方法直接返回一個InputStream流對象getResourceAsStream方法是查找具有給定名稱的資源,返回 InputStream對象。注意getResourceAsStream方法是相對與/根路徑下的位置。 這樣的路徑是指定絕對

10、路徑,如果不以/“開頭, 那么路徑是相對與這個class所在的包的表示從當前classs下面的路徑找文件。InputStream input=ClassNameConfig.class.getResourceAsStream(/classNameCperties);5Class/ClassLoader類中的getResource()方法返回的是一個URL對象Class/ClassLoader類中的getResource方法是查找?guī)в薪o定名稱的資源路徑并返回一個URL對象其實Class.getResource()方法是委托裝入該類的類裝載器,并最后返回一個用于讀取類文件資源的U

11、RL;當然,當指定的類名字不能在當前的classpath中找到時,Class.getResource()方法將返回null。Class/ClassLoader類中的getResource()方法兩者不同是Class類中的getResource()方法是從當前包路徑查找資源,而ClassLoader類那么是從系統(tǒng)的classpath的根查找;比方com.px1987.ClassA.getResource(a.gif)得到的是com/px1987/a.gif文件。如果在根路徑classpath,使用com.px1987.ClassA.getResource(/a.gif)或getClass().g

12、etClassLoader().getResource(a.gif)。6Thread類中的contextClassLoader屬性代表線程的上下文 ClassLoader每個運行中的線程都有一個成員contextClassLoader,用來在運行時動態(tài)地載入其它類,系統(tǒng)默認的 contextClassLoader是systemClassLoader,所以一般而言java程序在執(zhí)行時可以使用JVM自帶的類、$ JAVA_HOME/jre/lib/ext/中的類和$CLASSPATH/中的類,并且在程序中可以使用Thread.currentThread(). getContextClassLoad

13、er()方法獲得當前線程的contextClassLoader。因此,在某個線程中需要應用某個類,可以首先利用Thread.currentThread().getContextClassLoader()方法獲得該線程的contextClassLoader;然后contextClassLoader請求它的父ClassLoader來完成該載入請求;但如果父ClassLoader無法載入類,那么contextClassLoader試圖自己來載入。下面為JDK API幫助中對Thread類中的getContextClassLoader方法的說明。InputStream input =Thread.cu

14、rrentThread().getContextClassLoader().getResource(classNameCperties).openStream();其實等同于下面的代碼:ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader(); URL oneURL = currentClassLoader.getResource(classNameCperties);InputStream input = oneURL.openStream();補充資料:

15、1、URI形式的絕對資源路徑 如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b URL是URI的特例。URL的前綴/協(xié)議,必須是Java認識的。URL可以翻開資源,而URI那么不行。并且URL和URI對象可以互相轉換,使用各自的toURI(),toURL()方法即可。2、本地系統(tǒng)的絕對路徑 D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b ,在java.io包中的類,需要使用這種形式的參數。但它們一般也提供了URI類型的參數,而URI類型的參數,接受的是URI樣式的String。因此,通

16、過URI轉換,還是可以把URI樣式的絕對路徑用在java.io包中的類中。 3、相對于classpath的相對路徑 如:相對于 file:/D:/java/eclipse32/workspace/jbpmtest3/bin/這個路徑的相對路徑。其中,bin是本工程的classpath。所有的Java源文件編譯后的.class文件復制到這個目錄中。 4、相對于當前用戶目錄的相對路徑 就是相對于System.getProperty(user.dir)返回的路徑。對于一般工程,這是工程的根路徑。對于JavaEE效勞器,這可能是效勞器的某個路徑。這個并沒有統(tǒng)一的標準! 所以,絕對不要使用“相對于當前用

17、戶目錄的相對路徑。然而,默認情況下,java.io 包中的類總是根據當前用戶目錄來分析相對路徑名。此目錄由系統(tǒng)屬性 user.dir 指定,通常是 Java 虛擬機的調用目錄。這就是說,在使用java.io包中的類時,最好不要使用相對路徑。否那么,雖然在J2SE應用程序中可能還算正常,但是到了J2EE程序中,一定會出問題!而且這個路徑,在不同的效勞器中都是不同的! 推薦使用相對于當前classpath的相對路徑,ClassLoader類的getResource(String name)、getResourceAsStream(String name)等方法,使用相對于當前工程的classpat

18、h的相對路徑來查找資源。讀取屬性文件常用到的ResourceBundle類的getBundle(String path)也是如此。3、修改ConnectDBBean類的程序代碼package com.px1987.webbank.dao.imple;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.logging.Level;import java.util.logging.Logger;import com.px1987.webbank.

19、config.ClassNameConfig;import er.ConnectDBInterface;import com.px1987.webbank.exception.WebBankException;public class ConnectDBBean implements ConnectDBInterface private static String JDBC_DBDriver_ClassName =null;private static String JDBC_DSN_URL = null;private static Str

20、ing JDBC_dbUserName=null;private static String JDBC_dbUserPassWord=null;private java.sql.Connection con = null;private static Logger logger = Logger.getLogger(ConnectDBBean.class.getName(); static/* * 利用ClassNameConfig實現附屬性文件中獲得與數據庫相關的連接信息 * */JDBC_DBDriver_ClassName = ClassNameConfig.getProperty(JD

21、BC_DBDriver_ClassName);JDBC_DSN_URL = ClassNameConfig.getProperty(JDBC_DSN_URL);JDBC_dbUserName = ClassNameConfig.getProperty(JDBC_dbUserName);JDBC_dbUserPassWord = ClassNameConfig.getProperty(JDBC_dbUserPassWord);tryClass.forName(JDBC_DBDriver_ClassName); catch (java.lang.ClassNotFoundException e)

22、/在此先不考慮異常處理logger.log(Level.INFO, 不能正確地加載JDBC驅動程序+e.getMessage();public ConnectDBBean() throws WebBankException public void initDBConnection() throws WebBankExceptiontrycon = DriverManager.getConnection(JDBC_DSN_URL,JDBC_dbUserName,JDBC_dbUserPassWord);catch (java.sql.SQLException e)logger.log(Level

23、.INFO, e.getMessage();throw new WebBankException(不能正確地連接數據庫并且出現SQLException);catch (NullPointerException e)logger.log(Level.INFO, e.getMessage();throw new WebBankException(不能正確地連接數據庫并且出現NullPointerException); public void closeDBCon() throws WebBankException if(con=null)return;trycon.close(); /注意:要識別

24、是否為重復調用,否那么會出現數據庫連接已經關閉的狀況con = null;catch (SQLException e)logger.log(Level.INFO, e.getMessage();throw new WebBankException(不能正確地關閉數據庫連接);public Connection getConnection() throws WebBankException initDBConnection();return con;public boolean isDBConnectionClose()return (con=null)?true:false;注意:在代碼中應用

25、JDK所提供的日志處理技術實現日志記錄,該方法有什么問題?以后將改變?yōu)槠渌夹g實現。1.1.2 別離對象的創(chuàng)立和對象的使用之間的職責應用GOF設計模式1、添加一個工廠類,用來統(tǒng)一創(chuàng)立ConnectDBInterface接口的對象實例什么是工廠模式?所應該要思考的如何更好地創(chuàng)立對象?如何動態(tài)地創(chuàng)立對象?為什么要應用工廠模式(別離對象使用者和對象創(chuàng)立者)?如何編程實現?1在工程中添加一個ConnectDBFactory類,包名稱為bank.factory2編程該工廠類,并利用反射技術實現動態(tài)地創(chuàng)立目標類的對象實例package com.px1987.webbank.factory;import c

26、om.px1987.webbank.dao.*;import com.px1987.webbank.exception.*;import java.util.logging.*; import er.ConnectDBInterface;public class ConnectDBFactory public static ConnectDBInterface newConnectDBBean(String connectDBBeanClassName) throws WebBankException ConnectDBInterface c

27、onnectDBBean=null;Logger logger = Logger.getLogger(ConnectDBFactory.class.getName(); Class oneTargetClassInstance=null;try oneTargetClassInstance= Class.forName(connectDBBeanClassName); catch (ClassNotFoundException e)logger.log(Level.INFO, e.getMessage();throw new WebBankException(不能正確地獲得+connectDB

28、BeanClassName+類);tryconnectDBBean = (ConnectDBInterface) oneTargetClassInstance.newInstance(); catch (InstantiationException e)logger.log(Level.INFO, e.getMessage();throw new WebBankException(不能正確地創(chuàng)立+connectDBBeanClassName+類的對象實例); catch (IllegalAccessException e) logger.log(Level.INFO, e.getMessage

29、();throw new WebBankException(不能正確地創(chuàng)立+connectDBBeanClassName+類的對象實例);return connectDBBean;注意在該工廠類中應用Java中的反射機制動態(tài)地創(chuàng)立出ConnectDBInterface接口的實現類對象實例請見上面的紅色的代碼,因此為可配置化的工廠-因為常規(guī)的工廠類是與具體的產品類是緊密關聯(lián)的,而可配置化的工廠是接收一個產品類名稱的參數變量。2、添加JDBC的驅動程序1JDBC驅動程序的主要作用是什么?它是各個數據庫廠家根據JDBC的標準制作的 JDBC實現類。2對數據庫訪問有什么性能的影響?3如何獲得?4將支持MySQL的JDBC驅動程序包文件添加到本工

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論