2012-12-16 2 views
0

요청을 처리하는 동안 예외가 발생하는 경우 Spring은 예외 핸들러를 등록하는 다양한 방법을 제공합니다. 보기를 렌더링하는 동안 예외가 발생하면 비슷한 예외 처리를 적용 할 수 있습니까? 적어도 로깅을 수행하는 기능을 원합니다.뷰를 렌더링하는 동안 throw 된 예외를 처리하는 방법

답변

1

뷰 렌더링 중에 발생하는 예외는 엄청난 처리를 할 수 없다는 것이 문제입니다. 특히, 일반적으로 예외 보고서가 포함 된 HTML 페이지를 렌더링 할 수 없으며 예외가 throw되기 전에 응답에 일반적으로 "커밋"이 있기 때문에 5xx 응답을 보낼 수도 없습니다.

그래서 당신은 (아마도) 할 수있는 최선은 다음과 같습니다

  • 가 잡아 예외를 기록보기 개체의 래퍼를 만들거나
  • 는 서블릿 필터에 로깅을 수행

하지만 어쨌든 잡히지 않은 예외를 기록하도록 웹 컨테이너를 구성 할 수 있습니다.

난 그냥 봄의의 HandlerInterceptor 클래스는 예외가 발생하는 경우 호출 될 것이다 'afterCompletion'방법을 공개 발견

업데이트합니다. 이 대 필터를 사용하면 얻을 수있는 이점에 대해 생각해보십시오.

시도해보십시오. :-) 그러나 다음과 같이 생각하면 그것이 효과가 있을지는 의문입니다.

jsp를 렌더링하는 동안 예외가 발생하면 필터 또는 인터셉터를 사용하면 작동하지 않습니다. 그것은 밖으로 잘못 인쇄 않습니다

Dec 16, 2012 12:18:03 PM org.apache.catalina.core.ApplicationDispatcher 
    invoke SEVERE: Servlet.service() for servlet jsp threw exception 
    javax.el.PropertyNotFoundException: Property 'fooo' not found on 
    type java.lang.String" 

불행하게도 예외 필터에 위쪽으로 전파되지 않습니다. 오류 알림을 보내고 실패한 요청에 대한 추가 정보를 기록하는 자체 로깅을 추가하고 싶습니다. 오류를 찾아 내기 위해 로그 파일을 주시하는 것은 좋은 방법이 아닙니다.

  1. 기회는 로그 메시지가 실제로 기록 서브 시스템을 사용하여 제조되어있다. 그렇다면 로깅 구성을 사용하여 JSP 엔진 로깅 이벤트에 대한 자체 처리기를 추가하고 특별한 알림을 보낼 수 있습니다.

  2. 예외가 1) JSP 뷰 렌더링 중에 throw되고 2) JSP 엔진이 전파하지 않는다는 사실은 (IMO) 사용자가이를 catch 할 수있는 방법이 없음을 의미합니다.

  3. 다른 옵션은 일반 시스템 모니터링의 일부로 로그 파일에 대한 스캐너를 설정하는 것입니다.

+0

로깅을 수행하기 위해 서블릿 필터를 사용하는 것이 좋습니다. 예외를 야기한 요청에 대한 추가 정보 로깅을 허용합니다. 나는 월요일에 그것을 발사 할 것이고, 그것이 작동 할 때 견본을 게시 할 것이다. – Kyle

+0

방금 ​​Spring의 HandlerInterceptor 클래스가 예외가 발생했을 때 호출되는 'afterCompletion'메서드를 노출한다는 것을 알아 냈습니다.이 대 필터를 사용하면 얻을 수있는 이점에 대해 생각해보십시오. – Kyle

+0

jsp를 렌더링하는 동안 throw 된 예외에 대해 필터 또는 인터셉터를 사용하면 작동하지 않습니다. 2012 년 12 월 16 일 12:18:03 org.apache.catalina.core.ApplicationDispatcher invoke 서블릿 jsp 용 Servlet.service()가 예외를 던졌습니다 javax.el.PropertyNotFoundException : 속성 'fooo 'java.lang.String 유형에 없습니다 "불행히도 예외가 필터 위쪽으로 전파되지 않습니다. 오류 알림을 보내고 실패한 요청에 대한 추가 정보를 기록하는 자체 로깅을 추가하고 싶습니다. 오류를 찾아내는 파일은 좋은 옵션이 아닙니다. – Kyle

관련 문제