오류가 사용자에게 노출되면 신뢰도가 추락한다.
방법1.try-catch : 좋은 방법이 아니다.
그 전에 jsp파일에서 입출력연산하면, 예외처리 안했다. 예외가 안나온다.
자바파일로 바뀌고 실행된다.
service()메서드가 이미 예외처리를 throw하고 있어서 jsp파일에서 예외처리를 하지 않아도 된다.
방법2.에러페이지 지정, 작성하기
사용자에게 에러처리를 해주는 게 아니라, 준비된 것처럼 대신해서 보여주는 페이지를 설정하는 거. 준비되지 않은 것(막 500숫자 나오는 페이지)을 보여주지 않겠다는 의미.
에러페이지 지정 :
<%@ page errorPage = "jsp파일명" %>
에러페이지 작성 :<%@ page isErrorPage = "true" %>
: 'true'로 지정하면, jsp페이지는 에러 페이지가 된다. 에러페이지로 지정된 jsp파일은 exception 기본 객체를 사용할 수 있다.
원래 jsp마다 일일이 지정하는 게 아니라 내가 만든 모든 jsp에서 404 or 500에러가 뜨면 화면을 보여준다. 코드별로 분할해서 정의할 수 있다.
<error-page>
태그는 한개의 에러 페이지를 지정한다.
<error-code>
태그는 에러 상태 코드를 지정한다.
<location>
태그는 에러 페이지로 사용할 jsp파일의 경로를 지정한다.
<error-page>
<exception-type> java.lang.NullPointerException</exception-type>
<location>/error/errorNullPointer.jsp</location?
</error-page>
위의 코드처럼 적으면, NullPointerException이 발생할 경우 errorNullPointer.jsp를 에러 페이지로 보여준다.
1순위. 페이지디렉티브
2순위. 익셉션타입
3순위. 에러코드
가능하다면, 예외를 올리면 된다.
에러페이지를 지정했음에도 제대로 동작하지 않는 상황.??
처음 출력버퍼에는 abc가 담기고 flush되버리면 헤더가 나가면서 브라우저한테 정상처리로 보내게 된다. 그럼 브라우저는 결과화면에 abc를 보내고 → de를 담았는데 e에서 에러가 났다! ⇒ de하다가 문제생겨서 de버리고 에러페이지의 xyz를 출력하게됨
어떤 특정한 jsp에 문제가 생기면 xyz만 깔끔하게 보여야되는데 이렇게 안 나옴. 에러알려주는 페이지랑 정상응답나오는게 섞여서 출력되는 경우가 진짜많다.(수강신청같은거 )
그럼 이거 어떻게 피해야할까? 페이지 디렉티브에서 출력버퍼를 바꿀 수 있었다. 밑의 예시 2번줄 처럼 <% page buffer = "1kb" %>
!!!!
예외가 발생했다는 위치까지 한번에 버퍼를 담을 수 있도록 버퍼 크기를 늘려라. = 버퍼의 크기를 늘려라. 만약에 연산의 수행순서가 상관없다면 코드위치를 바꿔도 되는데(안될 가능성이 높음)