WEB/JSP Servlet

에러 처리 : 익셉션, 에러 페이지

노랑파랑 2016. 10. 27. 20:08
반응형




익셉션 집접 처리

* 사용자가 웹 컨테이너에서 만든 에러 화면을 보게 되면 신뢰성과, 코드의 보안 측면에서 적절하지 않다.

* try-catch를 이용해서 직접 익셉션을 처리해 익셉션이 발생할 때 알맞은 응답을 생성할 수 있다.

 try {

실행 코드;

} catch(Exception e) {

에러 발생 시 코드;

}

* 직접 익셉션을 처리하면 응답 결과 중 일부만 선택해서 변경할 수 있다. 





에러 페이지

* 익셉션이 발생할 때 완전히 다른 응답 결과를 보여주고 싶을 때 사용한다.


1. 에러 페이지 지정

* 지정한 에러 JSP 페이지를 보여줄 수 있다.

* page 디렉티브의 errorPage 속성을 사용하여 지정한다.

<%@ page errorPage = "에러 페이지.jsp" %>


2. 에러 페이지 작성

* 에러 페이지에 해당하는 JSP 페이지는 page 디렉티브의 isErrorPage 속성 값을 "true"로 지정해야 한다.

<%@ pgae isErrorPage = "true" %>

* 위와 같이 지정하면 JSP 페이지는 에러 페이지가 된다. 이 JSP 페이지는 exception 기본 객체를 사용할 수 있다. 

* exception 객체 : JSP 실행 과정에서 발생한 익셉션 객체에 해당한다.

* 에러 페이지의 응답 길이가 짧으면 인터넷 익스플로러에서는 지정한 에러 페이지 대신 자체 에러 화면을 표시한다.

- 응답 상태 코드가 400, 404, 500 등의 에러 코드이고, 전체 응답 길이가 512Byte 보다 작을 때.

* 인터넷 익스플로러에서도 지정한 에러 페이지를 출력하고 싶다면, 크기를 512 Byte 보다 커야한다. 에러 페이지의 완성본이 512Byte 보다 작다면

 HTML 등의 필요하지 않은 주석을 포함해 크기를 키운다


3. 응답 상태 코드별 에러 페이지 지정

* 에러 코드별로 사용할 에러 페이지를 web.xml 파일에서 지정할 수 있다.

<?xml version="1.0" encoding="utf-8"?>


<web-app ...>

 ...

<error-page>

<error-code>에러코드</error-code>

<location>에러 페이지의 URL</location>

</error-page>

 ...

</web-app> 

* <error-page> 태그는 한 개의 에러 페이지를 지정하기 때문에 여러 페이지를 지정하려면 <error-page> 태그 영역을 추가 생성한다.


★ 주요 응답 상태 코드


4. 익셉션 타입별로 에러 페이지 지정하기

* 위 방법과 유사하게 <error-code> 대신 <exception-type> 태그를 사용한다.

<?xml version="1.0" encoding="utf-8"?>


<web-app...>

<error-page>

<exceptio-type> 해당 자바 익셉션 패키지 (예 : java.lang.NullpointerException) </exception-type>

<location> 에러 페이지.jsp </location>

</error-page>

</web-app>


5. 에러 페이지 우선순위와 지정 형태

* 지정 방식이 여러개일 경우 우선순위

1) page 디렉티브의 erorPage 속성에 지정한 에러 페이지.

2) JSP 페이지에서 발생한 익셉션 타입이 web.xml 파일의 <exception-type>에 지정한 익셉션과 동일한 경우 지정한 에러 페이지

3) 에러 코드가 web.xml 파일의 <error-code>에 지정한 에러 코드와 동일한 경우 지정한 에러 페이지

4) 아무것도 지정하지 않은 경우 웹 컨테이너가 젝ㅇ하는 자체 에러 페이지

* 우선순위를 고려한 에러 페이지 지정

1) 전용 에러 페이지가 필요한 경우 page 디렉티브의 errorPage 속성을 사용해 에러 페이지 지정

2) 범용적인 에러 코드에 대해 web.xml 파일에 에러 페이지 지정.

3) 별도로 처리해야 하는 익셉션의 타입의 경우 web.xml에 <exception-type> 태그를 추가하여 에러 페이지 지정.


6. 버퍼와 에러페이지 관계

* 버퍼가 다 차게되면 클라이언트로 버퍼의 내용이 전달되는데, 이 때 플러시할 때 가장 먼저 응답 헤더를 전송한다. 응답 상태 코드는 이 응답 헤더의 앞에 전송되므로 최초로 버퍼를 플러시할 때 전송되는 것은 응답 상태 코드이다. 따라서 버퍼가 최초로 플러시할 때까지 에러가 발생하지 않으면 웹 브라우저에 200 응답 상태 코드가 전송된다. 

* 위 이유로 응답 상태 코드와 에러 페이지 내용을 모두 완전한 상태로 전송하려면 버퍼가 플러시되면 안된다. 만약 버퍼가 이미 플러시된 이후에 에러가 발생하게 된다면 웹 브라우저는 이미 200 응답 상태 코드와 일부 응답 결과 화면을 전송받았기 때문에, 일부 페이지의 내용만이 웹 브라우저에 출력되고 그 뒤의 에러 페이지의 내용이 붙게 된다. 

* 또한, 익셉션이 발생하면 응답 상태 코드가 500이 되어야 하는데 이미 200 응답 상태 코드를 전송했기 때문에 웹 브라우저는 정상적으로 응답이 도착했다고 판단한다.


 


반응형

'WEB > JSP Servlet' 카테고리의 다른 글

쿠키  (0) 2016.10.28
자바빈 (JavaBeans)  (0) 2016.10.27
기본객체 : out, pageContext, application, 속성 사용  (0) 2016.10.27
웹 어플리케이션 폴더  (0) 2016.10.27
JSP 처리과정, 출력버퍼와 응답  (0) 2016.10.26