15. DBCP

2023. 3. 28. 09:11Lang/JSP

728x90
반응형

1. DBCP를 이용한 커넥션 풀

  • 자카르타 프로젝트의 DBCP api를 사용
    • 관련 jar 파일 설치
      • 톰캣설치폴더/lib 에 포함되어 있는 jar
    • server.xml 수정
<!-- Tomcat DBCP -->
<Context >
  <Resource name="jdbc/oracledb"
    auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver"
    type="javax.sql.DataSource"
    url="jdbc:oracle:thin:@192.168.1.101:1521:orcl"
    username="herb" password="herb123" 
    maxActive="20" maxWait="-1" />
</Context>
  • jsp페이지에서 커넥션 풀 사용
Connection con=null;

/*
JNDI(java Naming Directory Interface)
- XML과 같은 외부 자원을 통해 객체의 레퍼런스를 얻어오는 기법
이미 올라온 객체를 이름을 통해 검색해서 찾아내는 것
lookup()이라는 메소드를 이용
*/

try {
  Context ctx = new InitialContext();
  Context envCtx = (Context)ctx.lookup("java:/comp/env");
  DataSource ds = (DataSource)envCtx.lookup("jdbc/oracledb");
  //DataSource ds = (DataSource)ctx.lookup("java:/comp/env/jdbc/oracledb");
  //톰캣이 구현한 커넥션풀 객체

  /*was에 따라 DataSource 등록하는 방법이 다르며, 가져오는 방법도 다르다
  java:comp/env는 톰캣에서 사용하는 프로토콜 */

  con = ds.getConnection();
  System.out.println("DataSource LookUp 성공!");
} catch (NamingException e) {
  e.printStackTrace();
} catch (SQLException e) {
  e.printStackTrace();
}
  • initialContext 객체 생성
    • lookup()메서드를 이용해 찾는다
  • 찾아낸 context객체로 datasource 객체 리턴
  • 어떤 객체든지 찾을 수 있도록 해야하기 때문에 할당된 객체들은 object 타입으로 감싸져있다
    • 사용시 원하는 타입으로 형변환 해야 한다
  • DataSource 객체의 getConnection() 메서드 사용
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="javax.naming.NamingException"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.Context"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="java.sql.SQLException"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border = "1">
    <tr>
        <th>번호</th>
        <th>제목</th>
        <th>이름</th>
    </tr>

<%
    Connection con = null;
    PreparedStatement ps = null;
    ResultSet rs = null;

    try{
        Context ctx = new InitialContext();
        Context envCtx = (Context)ctx.lookup("java:/comp/env");
        DataSource ds = (DataSource)envCtx.lookup("jdbc/oracledb");

        con=ds.getConnection();

        String sql = "select * from reboard";
        ps = con.prepareStatement(sql);

        rs=ps.executeQuery();
        while(rs.next()){
            int no = rs.getInt("no");
            String title=rs.getString("title");
            String name = rs.getString("name");%>
            <tr>
                <td><%=no %></td>
                <td><%=title %></td>
                <td><%=name %></td>
            </tr>
        <%}
    }catch(NamingException e){
        e.printStackTrace();
    }catch(SQLException e){
        e.printStackTrace();
    }finally{
        if(rs!=null) rs.close();
        if(ps!=null) ps.close();
        if(con!=null) con.close();
    }

%>
</table>

</body>
</html>
728x90
반응형

'Lang > JSP' 카테고리의 다른 글

16. 에러처리  (0) 2023.03.28
14. 자바빈  (0) 2023.03.27
13. 액션태그  (0) 2023.03.27
12. 파일업로드  (0) 2023.03.27
11. jsp에서의 트랜잭션 처리  (0) 2023.03.27