2010-12-08 2 views
6

JSP 태그를 사용하여 일부 데이터를 검색하는 JSP 페이지 (Tomcat)가 있습니다. 그러나 이러한 JSP 태그는 예외를 throw 할 수 있습니다 (예 : 매개 변수 값이 유효하지 않은 경우). 지금 나는이 상황에 대한 더 나은 오류 처리를 구현하고 싶다. GLOBALLY 예외 핸들러를 지정하는 방법을 찾지 못했습니다 (JSP에서 throw 된 예외에 대해 web.xml의 오류 페이지 정의가 작동하지 않음). 지금까지 찾은 유일한 방법은 모든 JSP 파일의 페이지 헤더에있는 errorPage 속성을 지정하는 것입니다.JSP 오류 처리기에서 HTTP 상태 코드를 설정하는 방법

<% page errorPage="/WEB-INF/jsp/errors/500.jsp" %> 

모든 JSP에서이 작업을 수행하는 것은 상당히 어렵지만 허용됩니다. 그러나 오류 페이지는 항상 HTTP 상태 코드 200으로 전달된다는 사실은 받아 들일 수 없습니다. 대신 500을 원합니다. 서블릿을 JSP 대신 errorPage로 사용하여 시도하고 response.setStatus (500) 및 response.sendError (500)를 설정하려고 시도했지만 두 호출이 무시 된 것 같습니다. 그래서이 코드 인쇄 "200"두 번 나는 아무 생각이 왜 :

System.out.println(response.getStatus()); 
response.setStatus(500); 
System.out.println(response.getStatus()); 

그래서 질문입니다 : 내가 JSP 오류 처리기에서 HTTP 상태 코드를 설정하는 방법?

답변

4

web.xml에서 오류 페이지를 구성 할 수 있습니다. 당신의 500.jsp에서

<error-page> 
     <error-code> 
      500 
     </error-code> 
     <location> 
      /500.jsp 
     </location> 
    </error-page> 

, 당신은 더 나은 sendError(500)를 사용하는 것, <%@ page isErrorPage="true" %>

+1

필자가 쓴대로 : JSP에서는 web.xml의 오류 페이지 정의가 작동하지 않습니다. 나는 web.xml에 이미 Servlet에서 던져진 예외를 잡기 위해이 라인들을 정확히 가지고있다. 그리고 그것은 잘 동작하지만, 문제는 JSP에서 서블릿이 아니라 예외 처리이다. – kayahr

2

대신 setStatus(500)으로 지시자를 설정 - 약간의 차이가 있습니다. web.xml의 설정은 sendError과 잘 맞지만, web.xml의 설정을 원하지 않으면 페이지 지시문의 error-page은 HTTP 오류 코드가 아니라 나를 위해 예외로만 작동합니다.

관련 문제