Java에서처럼 JSP도 에러 처리를 할 수 있다.
에러 화면을 사용자에게 직접적으로 보여주면 사용자는 해당 사이트를 신뢰하기 어렵고 코드의 일부가 노출되기 때문에 보안 측면에서도 좋지 않다.
에러가 발생하는 화면 그대로를 보여주는 것이 아니라 예외 처리를 통해 알맞은 응답을 처리해주거나 에러 페이지를 따로 만들어 해당하는 에러가 발생하면 에러 페이지를 띄워주는 것이다.
1. JSP에서 에러 처리를 하는 방법 2가지
1) try-catch문 사용
- try-catch를 사용하지 않고 pname이 null일 경우에는 HTTP 상태 500 - 내부 서버 오류 발생 이라는 에러가 발생한다. try-catch문을 사용하면 null 대신에 알맞은 상황 값을 넣어서 띄워줄 수 있다.
[try-catch 사용]
2) 예외 타입 또는 에러 상태 코드에 따라 에러페이지 띄우기
- 2번째 방법은 아래 에러 페이지를 띄우는 방법 3가지에서 설명하도록 하겠다.
2. JSP에서 에러 페이지를 띄우는 방법 3가지
1) page 지시자의 errorPage로 에러 페이지 띄우기
- 띄울 에러페이지 jsp 파일에는 아래 page 지시자로 에러를 처리해주는 페이지이다 라는 속성을 주어야 한다.
<%@ page isErrorPage="true" %>
- jsp 파일을 실행시켰을 때 에러페이지를 띄우기 위해선 page 지시자로 띄울 에러페이지를 지정해주어야 한다.
<%@ page ErrorPage="에러페이지경로" %>
예시) 파라미터 값이 넘어오지 않았을 때 발생하는 에러를 error 폴더 안에 viewErrormessage.jsp 생성하여 해당 에러페이지로 띄우기
[errorNullPointer.jsp]
[에러 발생하는 jsp 파일]
> 에러가 발생하는 jsp 파일을 실행시키면 아래와 같이 에러 페이지가 잘 출력되는 것을 확인할 수 있다.
2) 예외 타입으로 에러 페이지 띄우기(ex. SQL Syntax Exception, NullPointer exception 등)
- 예외 타입으로 에러 페이지를 띄우기 위해서는 web.xml에서 <error-page> 태그 안에 <exception-type>으로 예외 타입을 지정하고 <loaction> 태그로 예외 타입이 발생했을 때 띄울 에러 페이지 경로를 지정해 주어야 한다.
예시) NullPointer 예외가 발생했을 때 errorNullPointer.jsp 에러 페이지를 띄우기
[errorNullPointer.jsp] -> error 폴더에 errorNullPointer.jsp 파일 생성
[web.xml]
[에러가 발생하는 jsp 파일]
3) 에러 상태 코드로 에러 페이지 띄우기(ex. 404, 500 등)
에러 상태 코드로 에러 페이지 띄우기 설명을 하기 전에 에러 상태 코드 종류는 여러 가지가 있는데 조금 정리해보자면 아래와 같다.
(*** 자주 발생하고 알아두면 좋은 에러 상태 코드)
- 200 : 요청을 정상적으로 처리했을 때 ***
- 404 : 요청한 URL(요청URL)의 자원이 존재하지 않는 경우 ***
- 500 : 서버 내부 에러(자바 코딩 에러..) ***
- 307 : 임시로 페이지를 리다이렉트할 때
- 400 : 클라이언트의 요청이 잘못된 구문으로 구성될 때
- 401 : 접근 허용하지 않을 때
- 405 : 요청한 메서드(GET방식, POST 방식, head, put, delete 등등)를 허용하지 않는 경우 ***
- 503 : 서버의 일시적인 서비스를 제공할 수 없는 경우
에러 상태 코드로 에러 페이지를 띄우려면 예외 타입과 동일하게 web.xml에서 처리를 해주어야 하는데 <error-page> 태그 안에 <error-code> 태그로 발생하는 에러 코드를 넣고 해당 코드로 에러가 발생했을 때 띄울 에러 페이지를 <location> 태그 안에 지정해주면 된다.
예시)
[error404.jsp]
[error500.jsp]
[web.xml]
[에러가 발생하는 jsp 파일]
'TIL > View Template' 카테고리의 다른 글
[SIST] JSP_자바빈(JavaBeans)과 <jsp:useBean> 액션 태그 (0) | 2022.06.20 |
---|---|
[SIST] JSP_days05_페이지 모듈화 (0) | 2022.06.20 |
[JSP] GET과 POST / redirect와 forward / JSP와 Servlet (0) | 2022.06.18 |
[SIST] JSP_days04 (0) | 2022.06.18 |
[SIST] JSP_days04_급여 등급에 해당하는 사원 정보를 가져와서 아코디언 / 탭 형식으로 출력하는 예제(+JSTL 맛보기) (0) | 2022.06.18 |