JSP에서 난 에러 디버깅 하기 프로그래밍

OKJSP에 올라온 [질문]jsp는 에러를 어떻게 잡나요?라는 질문에 대한 답변으로 쓴 것인데, 다른 JSP 개발자들에게도 도움이 될 것 같아 옮겨둔다.

1. JSP에서 예외가 발생해서 Stack Trace가 잔뜩 출력되면 kenu님이 정리해 둔 문서에 따라 예외를 해결한다.

2. 그러나, 근본적으로 JSP페이지에서는 복잡한 로직에 의한 예외가 발생하지 않게 하는 것이 좋다. 즉, MVC 패턴에 따라 모든 로직을 JSP외부로 분리하고 JSP에는 화면에 출력하기 위한 로직만 남겨둔다.
View에만 관련된 로직에서 난 에러는 굳이 Servlet Class 파일까지 분석하지 않아도 눈대중으로 잡아내는 것이 가능하다.

3. JSP Spec 2.0/Servlet Spec 2.4 이상(Tomcat 5이상)을 사용한다. web.xml 선언을 Servlet Spec 2.4로 해야만한다. 이렇게 하면 JSP에서 오류가 발생할 경우, 컴파일된 서블릿의 줄 번호가 아니라 JSP의 줄 번호를 정확하게 집어준다.
이 외의 방법으로는 템플릿 엔진으로 Velocity나 Freemarker를 사용한다. Freemarker는 아직 안써봐서 모르지만 Velocity도 에러가 난 줄을 정확하게 집어준다. VelocityFreemarker는 Servlet/JSP 스펙에 상관없이 사용할 수 있기 때문에 Servlet Spec 2.3 이하 사용자들도 문제없이 사용할 수 있다. 개인적으로 Velocity는 HTML 템플릿 엔진으로써는 권하고 싶지 않다(하지만 그래도 JSP 1.2보다는 낫다). Freemarker 권장.

4. JSP를 사용했는데 분명히 오류가 발생하긴 했는데 그냥 하얀 백지 화면이 출력되거나, 혹은 내용이 상위 일부만 출력되고 HTML 뚝 잘려 나온다면, 그것은 Buffer 때문이다. JSP의 기본 버퍼 설정인 8KB 가 넘어가는 내용을 이미 출력한 상태에서 예외가 발생하면 지금까지 출력된 내용들 때문에 예외 Stack Trace는 화면에 출력되지 않는 현상이 나타난다.
이럴때는 JSP의 맨 처음과 맨 아래를 try/catch로 감싸고 catch 문에서 발생한 예외의 Stack Trace를 printStackTrace()로 출력해서 보면된다.
그리고 이를 무시하는 방법으로 JSP의 buffer size를 증가시켜줄 수도 있다.
<%@ page buffer="100kb" %>

Buffer size를 증가시키면 예외가 발생할 때까지 출력된 내용이 버퍼 사이즈 이내라면 그 내용을 무시하고 예외를 찍는다.

결론은.. 되도록 MVC로 작성하라는거..


핑백

  • ddam40님의 글 - [2007년 12월 27일, 목요일] 2007-12-27 03:43:25 #

    ... metoo web.xml 선언을 Servlet Spec 2.4로 해야만한다. 이렇게 하면 JSP에서 오류가 발생할 경우, 컴파일된 서블릿의 줄 번호가 아니라 JSP의 줄 번호를 정확하게 집어준다.오옷 정말? 내일 해바야지. 근데 어짜피 include 가 있을탠데...-,- ... more

  • links for 2007-12-27 - RERIC.COM 2007-12-28 05:20:10 #

    ... o 웹 취약점 스캐너 via http://peterpan.egloos.com/1688482 (tags: nikto security web tools) 까먹지말자! : JSP에서 난 에러 디버깅 하기 결국 MVC를 사용하라는 것! (tags: jsp error) RSS 2.0 피드를 통해 이 글에 대한 댓글들을 확인하실 수 있습니다. ... more