---
# System prepended metadata

title: 1/16 Servlet 觀念
tags: [Servlet]

---

# 1/16 Servlet 觀念

###### tags: `Servlet`

# 1-193 JDBC
查完沒東西不代表錯只是空值
下指令ResultSet完要確認資料
# 1-194 DataSource介面
一群連線物件(connection objects)連接資料庫
servlet連接JNDI API連線物件
JNDI=java naming directory interface(查介面)管理可用connection pool更有效率(快取)
# 1-195 Connection Pooling
實體連線可被多次使用(邏輯連線):
紅色邏輯連線
![](https://i.imgur.com/CLICqG1.png)
這個連線不會因客戶端結束而關閉
# 1-195 Connection Cashing(快取)
管理多個連線
Connection Factories(連線工廠):資源管理
Cashing給資料->DataSource
# 1-197 Connection Factories
連線給resource manager
# 1-198 Naming Services
j2ee提供使用者 使用(名稱環境)(Naming Environment)
Container 提供資料
Context=初始環境
lntitialContext
# 1-199 jndi 
JDBC java:comp/env/jdbc 跟jdbc要資料有關
# 4-200 資料庫連線
不用get  跳過連線工廠去拿 用dataSource
# 4-201 JNDI API使用範圍與步驟
先取得JNDI Naming Initial Context
javax.naming.InitialContext ctxt=new InitialContext();
執行lookup取得Connection factory
DataSource去接 ctxt.lookup
ctxt.lookup(java:comp/env/jdbc)裡面舉例:像藝名 程式碼不用改改裡面位址
# 4-202 web.xml宣告Connection Factories
```<resource-ref></resource-ref>```
是用DataSource不是Connection
# 4-203 Connection Factory Reference Element
只改上面 jdbc/EmployeeDB (邏輯名稱)
res-auth身分驗證(Container)
# 4-204 實作Database Query Servlet
```
<resource-ref>
    <description>MS SQL Server DataSource Example</description>
    <res-ref-name>jdbc/EmployeeDB</res-ref-name> //修改路徑名稱
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth> //Container身分驗證
  </resource-ref> 
```
# 4-205 tomcat
https://confluence.atlassian.com/conf59/configuring-a-sql-server-datasource-in-apache-tomcat-792499577.html
![](https://i.imgur.com/D9vYuLF.png)
xml 對照
```
<res-ref-name>jdbc/EmployeeDB</res-ref-name>
```
# context.xml
```
<Resource name="jdbc/EmployeeDB" auth="Container" type="javax.sql.DataSource"
    username="sa"
    password="manager"
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    url="jdbc:sqlserver://localhost:1433;databaseName=DemoLab"
    maxTotal="100"
    maxIdle="30"
    maxWaitMillis="10000"
    />
```
# 4-206 DAO(Data Access Object)觀念
![](https://i.imgur.com/PTTz8OE.png)
# 4-208 DAO
DAO讓系統跟底層完全切開來
class提供定義，api標準化
# 4-209 DAO
適合後端不同資料庫，方法名稱標準化，共同的interface(介面)，把程式跟資料庫的機制(綁緊緊)decouple
模組化成本降梯 不易壞掉
# Consequences of Using DAO Pattern
Resource vendor independence跟廠商沒依賴性(完全獨立)
Resource implementation independence維護分開

