이번 시간에는 오라클 DB에 접근하는데 접근 권한 거부나 계정 정보가 불일치하여
접근이 안되는 예외 상황이 발생하면 PAGE 지시어를 이용하여 예외 처리 페이지를
지정하는 예제를 올려봅니다.
저번에는 스샷을 안 찍었는데, 이번에는 스샷 찍겠습니답!!
일단 먼저 오라클 db에 접근하는 소스를 올려봅니다.
==========================================================
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.sql.*"%>
<%@ page errorPage="error.jsp" %>
<%-- 이 페이지에서 예외가 발생하면 error.jsp에서 처리하겠다는 의미 --%>
<h1>page 지시어를 이용한 예외 처리 페이지 지정</h1>
<%
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:ORCL";
String user="scottt", pwd="tiger";
Connection con=DriverManager.getConnection(url,user,pwd);
out.println("<h1>DB연결 성공</h1>");
String sql="SELECT * FROM TAB";
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(sql);
%>
<h2 style="color:red"><%=user%>계정의 테이블 목록</h2>
<%
while(rs.next()){
String tname=rs.getString(1);
String type=rs.getString(2);
out.println("<li>"+tname+": "+type+"</li>");
}
if(rs!=null) rs.close();
if(st!=null) st.close();
if(con!=null) con.close();
//cmd->sqlplus -> purge recyclebin; 해서 scott 계정에 있는 찌거기 데이터 비우기 -> 출력 결과 깔끔하게 나옴
%>
=========================================================
위의 소스 코드를 실행하면 아래와 같은 화면이 출력됩니다.
scott 계정의 테이블 목록을 다 보여줍니다.
하지만 간혹..
'String user="scottt", pwd="tiger";' 와 같이
scott인 아이디에 't' 를 하나 붙여서 로그인을 실패하면
error.jsp 에서 예외가 발생된 상황에 대해 처리하는 소스를 기술해야 합니다.
자 그럼 바로 소스 올려봅니다.
딱히 별건 없습니답 ^^
=========================================================
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<%
response.setStatus(response.SC_OK);
//ie에서는 위 코드를 지정해야 에러 처리 페이지가 동작한다
%>
<%-- error.jsp 페이지에서는 page 지시어에 반드시 isErrorPage 라는 속성값으로 true를 주어야 한다.
그래야 exception 이라는 내장 객체를 사용할 수 있다. --%>
<!DOCTYPE html>
<html>
<head><title>error 처리 페이지</title></head>
<body>
<div align="center">
<table style="width:600px;height:400px;background-color:#efefef">
<tr>
<td style="color:red;text-align:center">
<%
if(exception instanceof java.sql.SQLException){
out.println("서버오류: "+exception.getMessage());
}else{
out.println("오류발생: "+exception.getMessage());
}
exception.printStackTrace(); // 스택 기록 찍기(서버 콘솔에)
%>
</td>
</tr>
</table>
</div>
</body>
</html>
=========================================================
위의 계정이 틀렸으면 저 소스 코드 페이지로 이동되어 처리됩니다.
댓글 없음:
댓글 쓰기