[JSP] 에러페이지 처리
웹페이지를 서핑하다보면 에러가 나는 경우가 있다.
http 프로토콜엔 미리 정의된 상태코드가 있다.
코드별 증상이 모두 다른데 대표적인 코드/증상으로는
200 - 성공 (정상적으로 페이지가 노출됨)
300대 - 리다이렉트 관련
404 - 찾고자 하는 URI가 없음
500 - 서버내부오류 등등 많이 있다.
어쨌든 어떤 상황에서든지 에러가 발생하면 Tomcat에선 자동으로 에러 페이지를 띄워주는데 이 페이지는 사용자 친화적이지 않고 보안상 이슈가 발생할 여지도 있기 때문에
사용자는 반드시 에러페이지를 따로 정의해주어야 한다.
JSP에서는 에러페이지를 정의하는 방법이 2가지 있다.
1) JSP 지시자로 에러페이지 정의하기
2) Web.xml로 에러페이지 정의하기
1)의 경우엔 뇌의 용량이 아까울 정도로 비효율적인 방법으로 생각되므로 그냥 저런게 있다 하고만 넘어가고 2) 방법을 살펴보자.
JSP파일을 실행하면 Web.xml 파일이 있을 것이다.
이 Web.xml은 이제는 익숙해졌다시피, 확장 된 마크업이다.
Web.xml파일 내에 그냥 아래처럼 추가해주면 그걸로 끝이다.
<error-page> // errorpage 태그
<error-code>404</error-code> // 이 error code가 발생하면
<location>/error404.jsp</location> // 이 페이지로 이동하세요
</error-page>
엄청 간단하지 않은가?
하지만 모든 에러코드를 저렇게 일일히 지정해주는 것은 생각만해도 귀찮은 일이다.
그렇다면 지정하지 않은 모든 에러가 발생했을 때, 범용적으로 쓸 수 있는 페이지를 하나 만들어 두는 것도 좋을 것이다.
마찬가지로 Web.xml 파일 내에 아래 코드를 추가하면 된다.
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errorpage.jsp</location>
</error-page>
*주의:
강의에서 그리고 인터넷에서 에러처리 페이지 내에 <% response.setStatus(200) %> 라는 코드를 추가하라는 가이드가 꽤 많이 보인다.
내가 이해하기로는, 이렇게 되면 response가 억지로 성공 status로 설정하기 때문에 마치 정상적으로 결과를 return해준 것으로 서버는 받아들일 것 같다.
즉, 비정상을 정상처럼 여겨버리는 문제가 발생한다.
비정상 처리가 났으면 비정상 처리가 났다고 해야지 이건 이상한 것 같아서 찾아보니 역시나 저건 옳은 방법이 아니란 걸 알게 되었다.
저렇게는 쓰지 말아야 한다.
그리고 이클립스 내장브라우저에서는 에러처리 페이지에 <% response.setStatus(200) %> 코드를 추가하지 않으면 마치 동작이 안하는 것 같은데
아무래도 이상해서 chrome에서 같은 URL을 입력하고 결과를 보니 에러페이지가 잘 노출된다.
그러니 이클립스 내장 브라우저에 속아서 이상한 <% response.setStatus(200) %> 코드 넣지말고 올바르게 처리하자.
http 프로토콜엔 미리 정의된 상태코드가 있다.
코드별 증상이 모두 다른데 대표적인 코드/증상으로는
200 - 성공 (정상적으로 페이지가 노출됨)
300대 - 리다이렉트 관련
404 - 찾고자 하는 URI가 없음
500 - 서버내부오류 등등 많이 있다.
어쨌든 어떤 상황에서든지 에러가 발생하면 Tomcat에선 자동으로 에러 페이지를 띄워주는데 이 페이지는 사용자 친화적이지 않고 보안상 이슈가 발생할 여지도 있기 때문에
사용자는 반드시 에러페이지를 따로 정의해주어야 한다.
JSP에서는 에러페이지를 정의하는 방법이 2가지 있다.
1) JSP 지시자로 에러페이지 정의하기
2) Web.xml로 에러페이지 정의하기
1)의 경우엔 뇌의 용량이 아까울 정도로 비효율적인 방법으로 생각되므로 그냥 저런게 있다 하고만 넘어가고 2) 방법을 살펴보자.
JSP파일을 실행하면 Web.xml 파일이 있을 것이다.
이 Web.xml은 이제는 익숙해졌다시피, 확장 된 마크업이다.
Web.xml파일 내에 그냥 아래처럼 추가해주면 그걸로 끝이다.
<error-page> // errorpage 태그
<error-code>404</error-code> // 이 error code가 발생하면
<location>/error404.jsp</location> // 이 페이지로 이동하세요
</error-page>
엄청 간단하지 않은가?
하지만 모든 에러코드를 저렇게 일일히 지정해주는 것은 생각만해도 귀찮은 일이다.
그렇다면 지정하지 않은 모든 에러가 발생했을 때, 범용적으로 쓸 수 있는 페이지를 하나 만들어 두는 것도 좋을 것이다.
마찬가지로 Web.xml 파일 내에 아래 코드를 추가하면 된다.
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errorpage.jsp</location>
</error-page>
*주의:
강의에서 그리고 인터넷에서 에러처리 페이지 내에 <% response.setStatus(200) %> 라는 코드를 추가하라는 가이드가 꽤 많이 보인다.
내가 이해하기로는, 이렇게 되면 response가 억지로 성공 status로 설정하기 때문에 마치 정상적으로 결과를 return해준 것으로 서버는 받아들일 것 같다.
즉, 비정상을 정상처럼 여겨버리는 문제가 발생한다.
비정상 처리가 났으면 비정상 처리가 났다고 해야지 이건 이상한 것 같아서 찾아보니 역시나 저건 옳은 방법이 아니란 걸 알게 되었다.
저렇게는 쓰지 말아야 한다.
그리고 이클립스 내장브라우저에서는 에러처리 페이지에 <% response.setStatus(200) %> 코드를 추가하지 않으면 마치 동작이 안하는 것 같은데
아무래도 이상해서 chrome에서 같은 URL을 입력하고 결과를 보니 에러페이지가 잘 노출된다.
그러니 이클립스 내장 브라우저에 속아서 이상한 <% response.setStatus(200) %> 코드 넣지말고 올바르게 처리하자.
댓글
댓글 쓰기