JSP 스크립트릿으로 데이터베이스 연동
JSP 페이지와 데이터베이스의 직접적인 연동
- JSP 페이지 내에서 직접 데이터베이스 관련 코드가 혼재됨
- 추후 페이지 변경 등의 작업이 있을 때 불편함
자바빈즈(Java Beans) 사용의 장점
- 내부적 데이터 처리와 공용화된 기능은 JSP 빈즈로 구현
- 프로그램 중복을 줄이고 원활한 유지보수 가능
- 한번 작성된 자바 빈즈를 여러 응용 프로그램에서 재사용 가능
JDBC 연동
JSP —> 자바빈즈로 빼서 연동
JSP : 화면 출력
자바빈즈 : DB를 처리를 하는 곳
서블릿 : 실제 쿼리문을 실행하는것
ConnectionPool을 사용한 데이터베이스 연결
ConnectionPool이란?
- 웹 프로그램에서 데이터베이스 연결, 질의 입력, 결과를 받아오는 부분에서 많은 시간 소요됨. →서버에 많은 과부하 줌
- ConnectionPool 을 사용해서 효율적으로 데이터베이스 연동
서버에 부담을 덜 주기 위해 사용한다.
Pooling 기법
- 효율적으로 여러 사용자에게 서비스하기 위해 미리 데이터베이스 연결을 위한 객체들을 생성
- Connection 객체의 재사용
- 데이터베이스 연결 객체를 매번 생성, 사용, 해제하지 않고 처음 만들어둔 데이터베이스 연결 객체를 계속 사용
- 사용자에게 필요한 응답을 주는데 걸리는 시간을 단축하고 시스템 부하를 줄임
Pooling 기법의 DBConnectionMgr
처음부터 미리 커넥션들을 만들어 놓고 필요할 때 마다 불러서 쓴다.
-DBConnectionMgr.java
- 코드를 알 필요 없고 커넥션풀을 관리해주는 자바 파일임 (오픈 소스임)
ConnectionPool을 이용한 데이터베이스 연결방법
1단계 : 데이터베이스 연결 pool 객체를 얻음 DBConnectionMgr pool = DBConnectionMgr.getInstance();
2단계 : 얻어진 pool로 Connection을 얻음. conn = pool.getConnection();
- 주어진 Connection을 통해 DB에 필요한 쿼리문 수행
- Close 할 필요 없음
3단계 : 사용된 Connection 을 반환. 재사용위해 닫지 않고 그냥 반환만 pool.freeConnection(conn);
코드열기
<%@ page contentType="text/html;charset=EUC-KR" import="java.sql.*, ch16_2.*" %>
<%
/* 데이터베이스 연결 pool 객체를 얻는다. 입력하세요 */
DBConnectionMgr pool = DBConnectionMgr.getInstance();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String id = "",
pwd = "",
email="";
int counter = 0;
try{
/* 얻어진 풀로 Connection을 얻는다. 입력하세요 */
conn = pool.getConnection();
// conn = DriverManager.getConnection(JDBC_URL, USER, PASS); 가 필요없음
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from members");
%>
<html>
<head>
<title>JSP에서 데이터베이스 연동</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<h2>JSP 스크립틀릿에서 Connection Pool을 이용한 데이터베이스 연동</h2>
<br/>
<h3>회원정보</h3>
<table border="1">
<tr>
<td><strong>ID</strong></td>
<td><strong>PWD</strong></td>
<td><strong>EMAIL</strong></td>
</tr>
<%
if(rs!=null){
while(rs.next()){
id = rs.getString("id");
pwd = rs.getString("passwd");
email = rs.getString("email");
%>
<tr>
<td><%= id %></td>
<td><%= pwd %></td>
<td><%= email %></td>
</tr>
<%
counter++;
}//end while
}//end if
%>
</table><br/>
total records : <%= counter %>
<%
}catch(SQLException sqlException){
System.out.println("sql exception");
}catch(Exception exception){
System.out.println("exception");
}finally{
if( rs != null )
try{ rs.close(); }
catch(SQLException ex) {}
if( stmt != null )
try { stmt.close(); }
catch(SQLException ex) {}
if( conn != null )
/* Connection을 반환함.
얻어진 pool 객체를 재사용하기 위해 닫지 말고 그냥 풀에 반환만함. 입력하세요 */
try{
pool.freeConnection(conn);
}
catch(Exception ex){}
}
%>
→ 여기에서 JSP 파일을 더 깨끗하게 하기 위해서 커넥션풀과 자바빈즈를 동시에 이용한다.
ConnectionPool을 사용한 데이터베이스 연결 기능 향상
ConnectionPool과 Bean을 이용한 데이터베이스 연결
- RegisterMgrPool.java
- DB에 연결할 때 미리 생성되어져 있는 Connection을 하나 빌려서 사용 및 반환
- RegisterMgrPool에서 수행된 쿼리에 대한 결과는 RegisterBean에 담겨져 jsp파일에서 이용
- usingJDBCPoolBean.jsp
- DB 관련 코드가 없고 전용 태그만 사용.
- 간략한 페이지 작성 가능
- 유지보수 효율적
JSP페이지 <-> RegisterMgrPool 간의 데이터 전송은 ArrayList 배열로 이동
Vector 클래스
- java.util 패키지에 있는 컬렉션의 일종.가변 크기 배열을 구현하고 있음.
- 컬렉션? 자바에서 자료 구조를 구현한 클래스
- 기존 배열은 크기 고정. Vector는 요소의 개수가 늘어나면 자동으로 배열의 크기가 늘어남
- 어떤 타입의 객체라도 저장 가능
- 멀티스레드 환경에서도 사용할 수 있도록 동기화되어 있음
- 참고
vector에 요소 추가 : add()
vector의 값 추출: get()
vector 안에 있는 요소 개수 : size() 등
JSP 스크립트릿으로 데이터베이스 연동
JSP 페이지와 데이터베이스의 직접적인 연동
- JSP 페이지 내에서 직접 데이터베이스 관련 코드가 혼재됨
- 추후 페이지 변경 등의 작업이 있을 때 불편함
자바빈즈(Java Beans) 사용의 장점
- 내부적 데이터 처리와 공용화된 기능은 JSP 빈즈로 구현
- 프로그램 중복을 줄이고 원활한 유지보수 가능
- 한번 작성된 자바 빈즈를 여러 응용 프로그램에서 재사용 가능
JDBC 연동
JSP —> 자바빈즈로 빼서 연동
JSP : 화면 출력
자바빈즈 : DB를 처리를 하는 곳
서블릿 : 실제 쿼리문을 실행하는것
ConnectionPool을 사용한 데이터베이스 연결
ConnectionPool이란?
- 웹 프로그램에서 데이터베이스 연결, 질의 입력, 결과를 받아오는 부분에서 많은 시간 소요됨. →서버에 많은 과부하 줌
- ConnectionPool 을 사용해서 효율적으로 데이터베이스 연동
서버에 부담을 덜 주기 위해 사용한다.
Pooling 기법
- 효율적으로 여러 사용자에게 서비스하기 위해 미리 데이터베이스 연결을 위한 객체들을 생성
- Connection 객체의 재사용
- 데이터베이스 연결 객체를 매번 생성, 사용, 해제하지 않고 처음 만들어둔 데이터베이스 연결 객체를 계속 사용
- 사용자에게 필요한 응답을 주는데 걸리는 시간을 단축하고 시스템 부하를 줄임
Pooling 기법의 DBConnectionMgr
처음부터 미리 커넥션들을 만들어 놓고 필요할 때 마다 불러서 쓴다.
-DBConnectionMgr.java
- 코드를 알 필요 없고 커넥션풀을 관리해주는 자바 파일임 (오픈 소스임)
ConnectionPool을 이용한 데이터베이스 연결방법
1단계 : 데이터베이스 연결 pool 객체를 얻음 DBConnectionMgr pool = DBConnectionMgr.getInstance();
2단계 : 얻어진 pool로 Connection을 얻음. conn = pool.getConnection();
- 주어진 Connection을 통해 DB에 필요한 쿼리문 수행
- Close 할 필요 없음
3단계 : 사용된 Connection 을 반환. 재사용위해 닫지 않고 그냥 반환만 pool.freeConnection(conn);
코드열기
<%@ page contentType="text/html;charset=EUC-KR" import="java.sql.*, ch16_2.*" %>
<%
/* 데이터베이스 연결 pool 객체를 얻는다. 입력하세요 */
DBConnectionMgr pool = DBConnectionMgr.getInstance();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String id = "",
pwd = "",
email="";
int counter = 0;
try{
/* 얻어진 풀로 Connection을 얻는다. 입력하세요 */
conn = pool.getConnection();
// conn = DriverManager.getConnection(JDBC_URL, USER, PASS); 가 필요없음
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from members");
%>
<html>
<head>
<title>JSP에서 데이터베이스 연동</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<h2>JSP 스크립틀릿에서 Connection Pool을 이용한 데이터베이스 연동</h2>
<br/>
<h3>회원정보</h3>
<table border="1">
<tr>
<td><strong>ID</strong></td>
<td><strong>PWD</strong></td>
<td><strong>EMAIL</strong></td>
</tr>
<%
if(rs!=null){
while(rs.next()){
id = rs.getString("id");
pwd = rs.getString("passwd");
email = rs.getString("email");
%>
<tr>
<td><%= id %></td>
<td><%= pwd %></td>
<td><%= email %></td>
</tr>
<%
counter++;
}//end while
}//end if
%>
</table><br/>
total records : <%= counter %>
<%
}catch(SQLException sqlException){
System.out.println("sql exception");
}catch(Exception exception){
System.out.println("exception");
}finally{
if( rs != null )
try{ rs.close(); }
catch(SQLException ex) {}
if( stmt != null )
try { stmt.close(); }
catch(SQLException ex) {}
if( conn != null )
/* Connection을 반환함.
얻어진 pool 객체를 재사용하기 위해 닫지 말고 그냥 풀에 반환만함. 입력하세요 */
try{
pool.freeConnection(conn);
}
catch(Exception ex){}
}
%>
→ 여기에서 JSP 파일을 더 깨끗하게 하기 위해서 커넥션풀과 자바빈즈를 동시에 이용한다.
ConnectionPool을 사용한 데이터베이스 연결 기능 향상
ConnectionPool과 Bean을 이용한 데이터베이스 연결
- RegisterMgrPool.java
- DB에 연결할 때 미리 생성되어져 있는 Connection을 하나 빌려서 사용 및 반환
- RegisterMgrPool에서 수행된 쿼리에 대한 결과는 RegisterBean에 담겨져 jsp파일에서 이용
- usingJDBCPoolBean.jsp
- DB 관련 코드가 없고 전용 태그만 사용.
- 간략한 페이지 작성 가능
- 유지보수 효율적
JSP페이지 <-> RegisterMgrPool 간의 데이터 전송은 ArrayList 배열로 이동
Vector 클래스
- java.util 패키지에 있는 컬렉션의 일종.가변 크기 배열을 구현하고 있음.
- 컬렉션? 자바에서 자료 구조를 구현한 클래스
- 기존 배열은 크기 고정. Vector는 요소의 개수가 늘어나면 자동으로 배열의 크기가 늘어남
- 어떤 타입의 객체라도 저장 가능
- 멀티스레드 환경에서도 사용할 수 있도록 동기화되어 있음
- 참고
vector에 요소 추가 : add()
vector의 값 추출: get()
vector 안에 있는 요소 개수 : size() 등