2013-05-01 1 views
3

javadoc of the javax.servlet.AsyncContext interface는 말한다 : 비동기 작업이 초과되었습니다하는 경우에서블릿 처리에서 '오류 발송'이란 무엇입니까?

, 다음 단계를 실행해야합니다 컨테이너 :

  • 호출은, 자신의 onTimeout 방법에서, 모든 AsyncListener 인스턴스 ServletRequest에 등록
      비동기식 작업이 시작되었습니다. 청취자 중에 complete() 또는 dispatch() 방법을 호출하지 않으면
    • HttpServletResponse.SC_INTERNAL_SERVER_ERROR 동일한 상태 코드 에러 발신을 수행한다.
    • 일치하는 오류 페이지가 없거나 오류 페이지가 complete() 또는 dispatch() 메쏘드를 호출하지 않은 경우 complete()으로 전화하십시오.

    하지만 어디서나 "오류 발송"의 의미를 찾을 수 없습니다! 실제로 같은 것을 외쳤던 Apache bug가있었습니다! (그들의 정확한 단어로 : "나는 '오류 파견'의 정의도 보지 못했다.)!

    물론,이를 명확하게 정의하고이를 사용하는 방법이 있어야합니다. 아는 사람 있습니까?

  • 답변

    4

    예외/오류 중에 컨테이너에서 수행 한 전달을 오류 처리라고합니다. 이들은 일반적으로 오류 페이지로 발송됩니다. 내가 아는 바로는 오류 발송을 직접 수행 할 방법이 없습니다.

    오류 디스패치를 ​​통해 발생한 요청의 Dispatcher 유형은 DispatcherType.ERROR로 설정됩니다. 서블릿의 서비스 메소드 코드에서 getDispatcherType()을 사용하여 디스패치 유형을 얻을 수 있습니다.

    다음의 6 가지 요청 범위 속성도 오류 디스패치에서 설정됩니다.

    "javax.servlet.error.exception" 
    "javax.servlet.error.exception_type" 
    "javax.servlet.error.message" 
    "javax.servlet.error.request_uri" 
    "javax.servlet.error.servlet_name" 
    "javax.servlet.error.status_code" 
    

    그래서 당신은 컨테이너가 오류를 리디렉션되는 오류 페이지가있는 경우, 당신은 당신이 더 많은 정보를 여섯 개 특성을 읽을 수 있습니다 알고 있습니다.

    http://docs.oracle.com/javaee/6/api/javax/servlet/DispatcherType.html http://docs.oracle.com/javaee/6/api/javax/servlet/RequestDispatcher.html

    을 설정할 수 있습니다 배포 설명자 (web.xml 파일)에 태그를 사용하여 오류 파견. 예를 들어 404 오류 코드에 오류 페이지 태그를 추가 한 경우 페이지를 찾을 수 없음 오류가 발생하면 해당 페이지로 컨테이너가 발송됩니다. 이 오류 페이지에서 request.getAttribute ("javax.servlet.error.message")와 같은 코드를 사용하여 오류에 대한 세부 정보를 검색 할 수 있습니다. 예 ...

    의 web.xml :

    <web-app> 
        <error-page> 
         <error-code>404</error-code> 
         <location>/error.jsp</location> 
        </error-page> 
    </web-app> 
    

    error.jsp : 클라이언트 요청 된 페이지가 발견되거나되지 않은 경우 위의 샘플 응용 프로그램에서

    <!DOCTYPE html> 
    <html> 
        <head> 
         <title>404 Error</title> 
        </head> 
        <body> 
         The page was not found. You requested <%= request.getAttribute("javax.servlet.error.message") %> but it was not found. Sorry. 
        </body> 
    </html> 
    

    , 당신은 response.sendError를 사용 ("404", "...") 어딘가에 있으면 컨테이너는 error.jsp로 오류를 전달합니다.

    JSP 오류 처리 메커니즘 ("errorPage"및 "isErrorPage"페이지 지시문 사용)도 여기에 적용됩니다.

    +0

    여전히 나에게는 흐릿합니다. 이 오류 발송을 어떻게 설정/구성합니까? 또한, doesnt response.sendError()는 error dispatch를 호출합니까? – brainOverflow

    +0

    오류 디스패치에 대한 추가 정보를 추가했습니다. – manojtc

    0

    직접 질문에 관련이 없습니다하지만 위의 대답을 포함, 분명 거의 모든 곳에서 언급되지 않은 본 어떤 다른 정보는 오류 파견은 기술적으로 은하지은 "리디렉션", 오히려 내부 앞으로 점이다. 초보자를 위해 이것은 일반적으로 "컨테이너가 오류 페이지로 리다이렉트 (redirect)"하는 것으로서 혼란스럽게 보일 수 있습니다. 따라서 컨테이너가 http 오류 코드/잡히지 않은 예외를 보게되는 순간 리소스를 통해 웹 xml을 조사하여 처리기가 정의되어 있는지 확인한 다음 존재하는 경우 해당 요청을 해당 리소스로 적절하게 전달합니다. 요청 발송자. 그런 다음 분명히 위의 답변에서 언급 한 모든 정보가 적용됩니다.

    그러나 리디렉션을 원할 경우 필터 나 서블릿 또는 응답 객체를 사용할 수있는 곳이면 어디에서나 리디렉션 할 수 있습니다.