page 지시어를 이용한 예외 처리 페이지 지정

안녕하세요

이번 시간에는 오라클 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>

=========================================================

위의 계정이 틀렸으면 저 소스 코드 페이지로 이동되어 처리됩니다.





댓글 없음:

댓글 쓰기