예외 처리에는 4가지 방법이 있음
우선순위대
1.try-catch
2.page디렉티브
3.web-xml = 웹브라우저에서 많이 쓰이는 방법, 많이 쓰이는 이유는 편함
1)code :
404,
500,
200,
2)type :
4.웹브라우저
프로세스 : 실행중인 프로그램 = CPU점유
ex) 냄비에 물넣음 → 불켜기→기다리기→물 끓으면→스프→면→계란
만약 물이 안끓으면 오류처리를 하는데
오류처리에는 4가지방법 처리
1.try-catch, 2.page디렉티브, 3.web-xml ,4.웹브라우저
1. try-catch = 동생 스스로 해결 = 자기 스스로 catch로 해결 -가장신속한 방법 그래서 우선순위가 높다.
2. page디렉티브 =형 도와줘 ㅠ = 다른페이지를 불러서 오류 해결 -형(다른페이지)이 없을 수 도 있음
3.web-xml = 엄마가 적어논 메뉴얼 보고 해결 - 엄마의 메뉴얼을 항상 있음(보고 해결하면됨 그리고 화면도 깔금함)
4.웹브라우저 = 가스렌지(시스템)가 직접 알려줌 = 노출되면 시스템이 노출되는것이라 별로 좋지 않다.
예외 처리 방법 | 설명 |
page디렉티브 태그를 이용한 예외 처리 | errorPage와 isErrorPage속성이용 |
web.xml 파일을 이용한 예외처리 | <error-code>또는 <exception-type> |
try/catch/finally를 이용한 예외처리 | 자바 언어의 예외 처리 구문을 이용 |
웹브라우저 예외처리 하는법
시스템이 알아서 예외처리를 해주는데
보기도 안좋고 화면에 노출된다.
페이지 디렉티브 예외처리 하는법
<%@ page errorPage="임포트할 파일.jsp" %>를 임포트해준다
나는 errorPage_error.jsp를 만들어 주었다.
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page isErrorPage="true" %>
<!-- isErrorPage 속성 : 현재 JSP 페이지를 오류 페이지로 호출하는
page 디렉티브 태그의 속성. isErrorPage를 true로 변경시 exception 내장 객체를 사용할 수 있음 -->
<!DOCTYPE html>
<html>
<head>
<title>Exception</title>
</head>
<body>
<p>오류가 발생했습니다.</p>
<!--
exception : JSP 에서 제공해주는 오류 처리용 기본 내장 객체
오류 이벤트의 toString()를 호출해서 간단한 오류 메시지 확인
-->
<p>예외 유형 : <%=exception.toString() %></p>
<!-- 오류 메시지의 발생 근원지를 찾아 단계별로 오류를 출력 -->
<%-- <p>단계별 오류 출력 : <%=exception.printStackTrace()%></p> --%>
<!-- 오류 이벤트와 함께 들어오는 메시지를 출력 -->
<p>오류 메시지 : <%=exception.getMessage() %></p>
<p>예외 객체 타입 : <%=exception.getClass().getName()%></p>
</body>
</html>
단계별 오류 출력 주석 해제하면
결과는 이렇게 나온다.
web.xml 처리방법
요소 | 설명 |
<error-code> | 오류 코드를 설정하는데 사용 |
<exception-type> | 자바 예외 유형의 정규화된 클래스 이름을 설정하는데 사용 |
<location> | 오류 페이지의 URL을 설정하는데 사용 |
주요 오류코드의 종류
코드 | 설명 |
200 | 요청이 정상적으로 처리되었다 |
307 | 임시로 페이지가 리다이렉트 된다 |
400 | 클라이언트의 요청이 잘못된 구문으로 구성된다 |
401 | 접근이 허용되지 않는다. |
404 | 지정된 URL을 처리하기 위한 자원이 존재하지 않는다(페이지가 없음) |
405 | 요청된 메소드가 허용되지 않는다, |
500 | 서버 내부의 에러다(JSP에서 예외가 발생하는 경우) |
503 | 서버가 일시적으로 서비스를 제공할 수 없다(서버 과부하나 보수 중인 경우) |
<!--
오류가 나면 오류 코드에 맞춰 오류 퍼리jsp로 매핑
[대표 오류 코드]
404 : 지정된 URL을 처리하기 위한 자원이 없음
500 : 개발자 오류
-->
<error-page>
<!-- 오류코드
오류 코드 : 웹 서버가 제공하는 기본 오류. 응답 상태 코드.
JSP페이지에서 발생된 오류가 이 오류 코드와 일치 시 매핑된 오류 페이지로 이동
-->
<error-code>404</error-code>
<!-- 오류 페이지 설정 -->
<location>/error/error404.jsp</location>
</error-page>
<error-page>
<!-- 오류코드 설정. ex) 10/0과 같은 잘못된 코드를 실행 시 -->
<error-code>500</error-code>
<location>/error/error500.jsp</location>
</error-page>
404에러가 났을때
500에러가 났을때
요청페이지를 설정한다.
설정한 파일을 만든다.
error404.jsp 파일 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
404오류 발생
</body>
</html>
erro500.jsp 파일 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
500오류 발생
</body>
</html>
이렇게 설정해주고
오류발생시 wbe페이지보다 우선순위인 xml에서 처리하게 된다.
exception-type오류로 예외처리하기
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error/errorNullPointer.jsp</location>
</error-page>
exception-type 에 러 타입과
location에 error처리할 페이지 설정
오류처리 페이지 작성
try-catch-finally를 이용한 예외처리
우선순위가 가장 높은 방법이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Exception</title>
</head>
<body>
<!--
POST방식
요청 URL : tryCatch_process.jsp
요청파라미터 : {num1=12&num2=6n}
GET방식
요청 URL : exception_process.jsp?num1=12&num2=6
요청파라미터 : num1=12&num2=6n
-->
<form action="tryCatch_process.jsp" method="post">
<p>숫자1 : <input type="text" name="num1" /></p>
<p>숫자2 : <input type="text" name="num2" /></p>
<p><input type="submit" value="나누기" /></p>
</form>
</body>
</html>
여기서 숫자2 : 6n문자열 보냄
tryCatch_process.jsp로 간다
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%-- <%@ page errorPage="exception_error.jsp" %> --%>
<!DOCTYPE html>
<html>
<head>
<title>Exception</title>
</head>
<body>
<% //스크립틀릿
// POST방식
// 요청 URL : exception_process.jsp
// 요청파라미터 : {num1=12&num2=6}
try{
String num1 = request.getParameter("num1"); //"12"
String num2 = request.getParameter("num2"); //"6"
//문자를 숫자로 형변환
int a = Integer.parseInt(num1); //12
int b = Integer.parseInt(num2); //12
int c = a / b;
out.print("<p>" + num1 +"/" + num2 + "=" + c + "</p>");
}catch(NumberFormatException e){
//오류 발생시 tryCatch_error.jsp로 포워딩
/*
1) forwarding : jsp를 해석 -> 컴파일 -> html리턴 받음. 데이터를 전달할 수 있음
2) redirect : URL를 재요청. 데이터를 전달하기 어려움
*/
//request 객체와 response객체를 전달
//tryCatch_error.jsp에서도 요청파라미터인 ?num1=12&num2=6n을 사용할 수 있게됨
RequestDispatcher dispatcher =
request.getRequestDispatcher("tryCatch_error.jsp");
dispatcher.forward(request, response);
}
%>
</body>
</html>
여기서 오류처리하고 catch에서
RequestDispatcher dispatcher =
request.getRequestDispatcher("tryCatch_error.jsp");
dispatcher.forward(request, response);
}를 써서 Parameter값을 그대로
tryCatch_error.jsp 파일로 보냄
tryCatch_error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<p>잘못된 데이터가 입력되었습니다.</p>
<p>숫자 1 : <%=request.getParameter("num1")%></p>
<p>숫자 2 : <%=request.getParameter("num2")%></p>
</body>
</html>
'JSP > JSP기초' 카테고리의 다른 글
JSP 페이지디렉티브 예외처리 (0) | 2023.07.11 |
---|---|
JSP 웹브라우저 예외처리 (0) | 2023.07.11 |
JSP(security) 프로그래밍적 시큐리티 처리 방법 정리 (2) | 2023.07.10 |
JSP(security) 프로그래밍적 시큐리티 처리 방법 (0) | 2023.07.10 |
JSP(security) 선언적 시큐리티 처리 방법_FORM (0) | 2023.07.07 |