내가 기존에 만들었던 JDBCUtil은 URL, ID, PW를 클래스에서 상수 선언을 하고 나중에 수정할 일이 있으면 필드에서 수정을 하면 메서드에서는 변경할 일이 없게끔 만들어 유지보수 용이성을 높혔는데...
web.xml
에 입력하고 application
을 통해서 가지고 오는 방식이 있을 거라고는 생각을 못했다! 😲😲😲 (왜냐하면 JSP를 배우기 전에 혼자 궁금해서 진행해봤던거라....)
총 3가지의 방법을 알려주셨는데 (1번째는 내가 사용한 방식!) 그 중에서 3번째 방법이 가장 cool😎하고 멋있어서 내가 만들어본 코드와의 차이점을 알아보기로 했다.
(게다가 나중에 배울 Spring이나 부트를 활용하면 더더더더 편한 방법이 있다고 한다......... 난 왜 이렇게 혼자 하드코딩했는가..... 그건 그때가서 또 비교해보도록 하자!!)
내가 사용한 DB 접속 정보를 클래스 안에 모두 넣는 방식의 장점이라고 하면 접속이 됐는지만 확인하는 테스트 용도로 사용하기 좋다!는 점이다.
단점은 java 파일로 만들었기 때문에 꼭 컴파일 과정을 거쳐야 한다는 점이다! 코드가 길지 않으면 컴파일의 과정이 짧아서 불편함을 못 느끼는데 실무에서는 내가 만들어본 것과는 다르게 코드가 매우 길텐데 그렇게 되면 컴파일 시간도 역시 길어진다는 점....
그래서 서버 환경과 관련된 정보들은 한 곳에서 관리하는 것이 좋은데 그게 바로 web.xml
이다.
web.xml 이 들어있는 폴더로 들어가(이클립스에서 열어도 된다) 파일을 열고
게다가 폴더를 즐겨찾기하거나 복사해서 바탕화면에 바로가기를 만들어두면 경로를 찾아가는 번거로움까지 줄일 수 있다...
(java파일의 단점이 여기에서 나타나는데, java는 컴파일 후에 class로 변경이 되기 때문에 여기에서 수정을 해봐야 컴파일을 하지 않으면 적용이 안된다.)
web.xml 파일을 저장한 뒤에 다시 JDBConnect.java로 돌아와서 매개값으로 ServeletContext의 application 객체를 받아온 뒤에 DD에 있는 OracleDriver,URL,ID,PW 와 해당하는 값을 driver,url,id,pw에 넣어준 후에
public JDBConnect(ServletContext application) {
try {
String driver = application.getInitParameter("OracleDriver");
String url = application.getInitParameter("OracleURL");
String id = application.getInitParameter("OracleID");
String pw = application.getInitParameter("OraclePW");
con = DriverManager.getConnection(url, id, pw);
System.out.println("Connection to database is success!");
} catch (Exception e) {
e.printStackTrace();
}
}
ConnectionTest.jsp에서 JDBConnect 객체를 생성만 하면 JDBC 연결 끝이다.... 생성자에서 application.getInitParameter()을 이미 다 선언해놨기 때문에 매번 JDBC를 연결할 때마다 가져오지 않아도 되므로 편리하고 코드의 중복도 대폭 줄일 수 있다!!
<H3>JDBC Connection Test 3 : Using by ServletContext application </H3>
<%
JDBConnect jdbc3 = new JDBConnect(application);
jdbc3.close();
%>
번외로 내가 작성한 close()는 conn, stmt, rs를 각각 따로 종료를 했기 때문에 실제로 실행할 때도 rs.close()-stmt.close()-conn.close() 이렇게 모두 불러와야 했는데
선생님은 이렇게 4줄로 끝내버리는 것을 보고 너무나도 허탈해졌다 ......... 😄😄😄
(물론 내가 하는 방식으로 하는 사람들도 있다고 한다. 각각 어디에서 오류가 발생해서 실행이 되지 않는지를 알려주니까...)
public void close() {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (pstmt != null) pstmt.close();
if (con != null) con.close();
} catch (SQLException e) {
System.out.println("close() method closed fail..");
e.printStackTrace();
}
} // close()