###### tags: `大吳上課` `Servlet` design partern hook and anchor # 0514 ## 小組相關 ER model (Table)完成後 1. 練習SQL create Table指令 2. 整合大家的1. 3. 送假資料 4. 建VO 5. 建DAO interface & DAO.java 6. JDBCDAO 7. (可於專案上線前一週) JNDIDAO ## 第一節課 開啟檔案 eclipse>SL314 1. Test_DataSource.java 2. web.xml eclipse>Server>Tomcat 3. context.xml UltraEdit>Tomcat>IBM_9 4. select_page_Basic-mySQL.jsp 5. web.xml 6. conf>context.xml 為何一個DataSource物件可以代表一個資料庫? 因為該物件能getConnection,此方法只有資料庫才有。 此技術來自於微軟,ODBC的資料來源,該技術只能來自於資料庫的連線。 透過這個DataSourece物件所取得的資料庫連線(Connection),一定是來自於連線池(Connection Pool)的資料庫連線嗎? 微軟ODBC一定沒有、過去不一定,現在的伺服器一定都有(時代在變),DataSource會自行和ConnectionPoolDataSource,現在的伺服器幾乎實作以下三介面一類別達成"一定": ConnectionEvent ConnectionEventListener ConnectionPoolDataSource PooledConnection 補充: JDBC四大類 1. JDBC-ODBC Bridge 不完全支援JDBC2.0的method(可能會因為資料庫太新,無法匯入至"建立新的資料來源"當中) 原生碼任何錯誤都會讓Server當掉 ## 第二節課 Webl應用系統如何使用JNDI命名服務來登記DataSourece的服務 P.180 JNDI為命名服務及取服務所用的(不一定只有資料庫用) 課程中為DataSourece會用 實務上,複製貼上即可 ## 第三節課 Context.xml>Server.xml 註冊於Context.xml,可以給所有專案用 Server.xml只針對一個專案 代名詞: 1. WebApp 2. root 3. context.xml 若公司無context.xml功能類型的,則用server.xml 暴力貓的關係,web.xml中甚至不用註冊以下程式碼 ``` <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/TestDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> ``` 一樣可以開啟網頁,但其他server不行,只有tomcat可以 只需要select_page_Basic_mySql.jsp中的註冊與context.xml中的註冊名稱相同即可。其他伺服器中,會有一個文件檔當作轉接器用,用來連結web.xml再轉至select_page_Basic_mySql.jsp 貓: A>C pass B 其他伺服器: A>B>C B為轉接器 下圖為轉接器檔的程式碼 ![](https://i.imgur.com/dQ9yWM4.jpg) ## 第四節課 ### 練習改寫資料庫 將DBPhoneLookup.java改寫 將Class.forname等載入改成連線池的做法 ``` // 舊的 // // Load (and therefore register) the JDBC Driver // Class.forName("com.mysql.cj.jdbc.Driver"); // // // Get a Connection to the database // con = DriverManager.getConnection( // "jdbc:mysql://localhost:3306/db01?serverTimezone=Asia/Taipei", "root", "24708053"); //新的 Context ctx = new javax.naming.InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/TestDB2"); con = ds.getConnection(); ``` JDBC練習,在完成專題前可改成JNDI(效能較佳) ## 第五節課 SL314中有GifReader的四個改版,可參考 available僅限用於從硬碟中適用,SQL不適用(將檔案大小直接取得,然後一次IO) 載入路徑時,相關路徑說明P.196 ## 第六節課 單元9 測貓咪