web.xml에서 기본 오류 페이지를 지정하는 방법은 무엇입니까?


138

내가 사용하고 <error-page>에 요소를 web.xml에 사용자는 404의 코드 오류로 특정 오류가 발생할 때 친절한 오류 페이지를 지정합니다 :

<error-page>
        <error-code>404</error-code>
        <location>/Error404.html</location>
</error-page>

그러나 사용자가에 지정된 오류 코드를 충족하지 않으면 <error-page>기본 오류 페이지가 표시 되기를 원합니다 . web.xml 의 요소를 사용하여 어떻게 할 수 있습니까?


2
어떤 서블릿 컨테이너를 사용 / 타겟팅하고 어떤 서블릿 버전을 web.xml선언 했습니까? Servlet 3.0 이후로는 쉬운 방법이 있습니다.
BalusC

Tomcat 6, servlet 2.5를 사용하고 있습니다
ipkiss

답변:


240

Servlet 3.0 이상에서는 다음을 지정할 수 있습니다.

<web-app ...>
    <error-page>
        <location>/general-error.html</location>
    </error-page>
</web-app>

그러나 Servlet 2.5를 사용하는 동안 모든 일반적인 HTTP 오류를 개별적으로 지정하는 것 외에 다른 방법은 없습니다. 최종 사용자가 겪을 수있는 HTTP 오류를 파악해야합니다. 예를 들어 HTTP 인증 사용법이 포함 된 기본 웹앱에서 디렉토리 목록이 비활성화되어 있고 사용자 정의 서블릿 및 처리되지 않은 예외를 발생시킬 수 있거나 모든 메소드가 구현되지 않은 코드를 사용하는 코드를 사용하는 경우 HTTP 오류에 대해 설정하려고합니다. , 403, 500 및 503입니다.

<error-page>
    <!-- Missing login -->
    <error-code>401</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Forbidden directory listing -->
    <error-code>403</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Missing resource -->
    <error-code>404</error-code>
    <location>/Error404.html</location>
</error-page>
<error-page>
    <!-- Uncaught exception -->
    <error-code>500</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Unsupported servlet method -->
    <error-code>503</error-code>
    <location>/general-error.html</location>
</error-page>

그것은 가장 일반적인 것들을 포함해야합니다.


일반 오류 페이지를 지정한 다음 <error-code>태그로 특정 오류 코드를 무시할 수 있습니까?
Qix-MONICA가 MISTREATED

6
@Tomas : Tomcat 사람들은 당신과 같은 문제가있었습니다. 이것은 아무 말 그대로 스펙에 언급되지 않은, 단지 사양에 14-10을 파악하고 web.xmlXSD 파일이 있음을 증명 <error-code>하고 <exception-type>필수가 아닌 옵션이되었습니다. 이슈 52135 참조 .
BalusC

java.sun.com/xml/ns/javaee/web-app_2_5.xsd 는 <error-page> 요소에 <description> 자식을 지정하지 않으므로 위 코드를 그대로 Servlet 2.5 web.xml에 붙여 넣으면 XSD가 발생합니다 유효성 검사 오류. 내가 의견을 말하면 잘 작동합니다. 감사합니다!
László van den Hoek

1
@BalusC : WEB-INF 내부의 general-error.html 페이지 (답변에 언급 된)는 어디에 배치해야합니까? HTTP 오류 403의 경우 <error-page> 정의를 작성했으며 error403.jsp 페이지가 WEB-INF에 있고 오류로 인해 error403.jsp 페이지가로드되는 서블릿 2.5에 이상한 문제가 있습니다. 리소스 중 일부에 액세스하려고 시도했지만 error403.jsp 내의 이미지 및 CSS가로드되지 않아 페이지가 잘못 표시됩니다.
Jayy

@Kaipa : CSS / JS / 이미지 리소스에 대한 웹 콘텐츠 상대 경로 대신 URL 상대 경로를 사용하십시오. 많은 초보자는 이러한 리소스가 서버 측에서 해결되었다고 잘못 생각하지만 실제로는 클라이언트 측에서 해결됩니다. 또한 참조 stackoverflow.com/questions/3655316/...
BalusC

23

다음과 같은 작업을 수행 할 수도 있습니다.

<error-page>
    <error-code>403</error-code>
    <location>/403.html</location>
</error-page>

<error-page>
    <location>/error.html</location>
</error-page>

오류 코드 403의 경우 403.html 페이지를 리턴하고 다른 오류 코드의 경우 error.html 페이지를 리턴합니다.


8

아래 예를 <error-page>사용하여 예외를 지정할 수도 <exception-type>있습니다.

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/errorpages/exception.html</location>
</error-page>

또는 다음을 사용하여 오류 코드를 매핑하십시오 <error-code>.

<error-page>
    <error-code>404</error-code>
    <location>/errorpages/404error.html</location>
</error-page>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.