2011-03-01 5 views
2

내 spring-mvc 웹 응용 프로그램에 접을 수있는 스택 추적 요소가있는 오류 페이지 (분명히 개발/디버그 옵션)가 있습니다. 이것은 잘 작동하는 데 사용되며 컨트롤러 (또는 때로는 JSP 엔진)에서 적절한 스택 추적을 표시합니다.JSP 오류 페이지에 JSP 오류가 발생했습니다.

: JSP를 오류 페이지로 만들 수 있습니까, 아니면 정적 HTML이어야합니까?

: 내가 뭘 잘못하고 있니?

이벤트의 체인 (내가 생각하는) 내 web.xml 파일에 정의 된 에러 핸들러에 의해 구동입니다 : 어딘가에 길을 따라

<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/view/errors/internalError.jsp</location> 
</error-page> 

(메이븐 빌드 시스템으로 전환 업그레이드 부두, 봄 2.5 -> 3.0),이 오류 페이지가 이전과 같은 방식으로 작동하지 않는 것으로 나타났습니다. 하나의 문제로 같은 문제가 발생합니다. 예외 스택 추적은 컨트롤러에서 예외가 발생했을 때 이 아니고이지만 오류 페이지 자체에서 발생합니다.

  1. 봄 컨트롤러가 캐치되지 않는 예외 조회수 :

    여기 일어나고있는 것 같다 무엇
    javax.servlet.ServletException: javax.servlet.jsp.JspTagException: 
    500 /WEB-INF/jsp/admin/errors/internalError.jsp 
        at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862) 
        at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791) 
        at org.apache.jsp.WEB_002dINF.jsp.admin.defaultParent_jsp._jspService(defaultParent_jsp.java:225) 
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    

    는 다음과 같은 이벤트 체인 throw new RuntimeException("no bananas")이 예외없이 정의부터 스프링 기반 MultiActionController을 (에 의해 체포되어

  2. 오류 처리기가이 페이지에 대해 정의 된 경우) 예외가 다시 발생합니다. 봄의 DispatcherServlet에서만 다시 캐치됩니다.
  3. DispatcherServlet에는 예외의 유형에 대한 적절한 오류 페이지를 발견하고 뭔가 (아마도 내 web.xml을) 본다 :
  4. 봄이 다음보기에이 URL을 해결합니다 (내 오류 JSP)과 렌더링을 시도 .
  5. 이제 기본 parent jsp (* 아래 참조)에 문제가 발생하여 이번에는 jetty의 ServletHolder에 의해 JSP 예외가 발생합니다. 이 예외는 이제 web.xml을 통해 오류 JSP 페이지에 매핑됩니다.
  6. 여기에 무한 루프가 발생한다고 생각할 수 있습니다. 그러나 두 번째로는 정상적으로 작동하고 JSP 오류가 렌더링됩니다.

기본 부모 JSP를 렌더링 할 때 JSP 엔진이 죽는 것처럼 보입니다. 문제가있는 호스트는 org.apache.taglibs.standard.tag.common.core.ImportSupport입니다. 나는 사람들이 WEB-INF 디렉토리에서 가져 오기와 관련이 있다고 말하는 몇몇 웹 게시물을 보았습니다.

// disallow inappropriate response codes per JSTL spec 
if (irw.getStatus() < 200 || irw.getStatus() > 299) { 
    throw new JspTagException(irw.getStatus() + " " + stripSession(targetUrl)); 
} 

HTTP 500 오류가 여기에 보이는 것처럼 보일지라도 문제가 발생합니다. 그러나 페이지 은 어떤 오류가 아니며에 있어야합니까?

답변

2

Q : JSP를 오류 페이지로 만들 수 있습니까, 아니면 정적 HTML이어야합니까?

괜찮습니다. 그것은 서블릿 일 수도 있습니다. 물론 버그가없는 한.

Q : 무엇이 잘못 되었나요?

오류 페이지에 버그가 있습니다. 오류 페이지에서 <c:import>을 사용하고있는 것 같습니다. /WEB-INF의 조각을 포함하십시오. 이것은 공개 자원이 아니기 때문에 허용되지 않습니다 (솔직히 고대 JSTL 버전에서 작동했을 것임을 상기하지 않습니다). 오히려 <jsp:include>을 사용하십시오.

+0

와우, 놀랍게도 내 게시물에서 그걸 신성화 할 수있었습니다. 그것이 바로 내가하는 일입니다. – Justin

+0

이것은 완전히 수정되었으므로 모든 페이지의 기본 부모는 을 불필요하게 사용하고있었습니다. 여전히 오류 페이지의 오류가 올바르게 표시되는 이유를 이해하지 못합니다. 이후 기본 부모도 사용합니다. – Justin

+0

당신을 진심으로 환영합니다. – BalusC

관련 문제