웹페이지를 서비스할 때, 가장 많이 시간이 소요되는 부분이 바로
' 데이터베이스를 로드하고 연결 ' 하는 시간.
미리 만들어놨다가 필요할때마다 저장소에서 가져와 쓰고,
다시 반납하는 방법으로 사용하는
'커넥션풀' 을 사용 할 필요가 있다.
여기선 dbcp를 사용해보자.
톰캣의 server.xml파일을 열어서, 사용할 Context의 태그의 안쪽에 아래의 Resource를 넣어준다. (// 절대 컨텍스트 태그를 닫지말고, 그 안에 Resource를 넣어줘야 한다.)
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:(내DB에 맞춰서)JAVA"
username="(내DB에 맞춰서)servlet" password="(내DB에 맞춰서)java"
maxTotal="20" maxIdle="10"
maxWaitMillis="-1"/>
해당 루트폴더의 web.xml 파일을 열어서 코드를 넣어준다.
<resource-ref>
<description>Oracle Datasource example</description> // 설명
<res-ref-name>jdbc/myoracle</res-ref-name> // 데이터소스 이름
<res-type>javax.sql.DataSource</res-type> // 타입
<res-auth>Container</res-auth> // 만들어주는 주체
</resource-ref>
사용할 모든 jsp마다 선언해주며 사용하는것은 굉장히 번거로우니,
미리 해당기능을 수행하는 Java Bean 을 만들어놓고, 쉽게 가져다 쓰자.
package 패키지경로;
import javax.naming.*;
import javax.sql.*;
public class DbcpBean {
private DataSource ds;
public DbcpBean() {
try {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
ds = (DataSource)envContext.lookup("jdbc/myoracle");
}catch(NamingException ne) { }
}
public DataSource getDs(){
return ds;
}
}
// 내가 사용할 JSP 파일의 맨 위에
1) DataSource 를 쓰려면, javax.sql.DataSource 를 import 해와야 함. (여기서는 * 으로 import)
2) 내가 불러오는 이 클래스를 앞으로 dbcp 라고 부르겠다고 이름을 정의해준다.
3) 내가 만든 DbcpBean 클래스가 있는 경로를 적어준다.
JSP의 서비스 태그안에
DataSource 이름 = dbcp(내가정한클래스이름).getDS();
메소드를 실행해서 생성한 ds를 받아오고,
본격적인 실행문(try~catch문)에,
connection = (데이터소스객체명).getConnection();
해서, 사용할 con을 꺼내?와서 사용하면 끝!