반응형

Tomcat 9에서 에러페이지 리다이렉팅을 위하여 

Java Project내 Web.xml에 각각의 오류에 해당하는 error Page를 기술하였음

ex)

<error-page>

  <error-code>404</error-code>

  <location>/noresource.os</location>

</error-page>

 

But.. 그러나... 두둥...

400, 505에러에 대해서는 redirect가 안됨

 

Tomcat 어느 버전부터인지는 확실하지 않지만

ErrorValve 처리에 대한 구성이 바뀐듯 함

 

해결 방법

Tomcat의 ErrorReportValve를 오버라이드하여 CustomErrorReportValve를 생성해야 함

 

먼저 

Maven 사용을 가정함

 

tomcat-catalina를 pom.xml에 등록

<dependency>

   <groupId>org.apache.tomcat</groupId>

   <artifactId>tomcat-catalina</artifactId>

   <version> 10.0.27</version>

</dependency>

 

※관련된 library는 다음과 같음 (Maven을 오프라인으로 사용시 아래 모든 jar를 받아주자)

이후

java 파일을 만들면 됨

 

package com.gunamis.config;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.Writer;

import java.io.OutputStreamWriter;

import org.apache.catalina.connector.Request;

import org.apache.catalina.connector.Response;

import org.apache.catalina.valves.ErrorReportValve;

 

public class CustomErrorReportValve extends ErrorReportValve {

    @Override

    protected void report(Request request, Response reponse, Throwable t) {

       try {

            StringBuilder sb = new StringBuilder();

            sb.append("<html><head><title>error</title></head><body>에러<br>Error!!!!</body></html>");

            // 한글출력을 위하여 아래 2줄 추가

            response.setContentType("text/html");

            response.setCharacterEncoding("utf-8");

            Writer writer = response.getReporter();

            if(writer != null) {

                  writer.write(sb.toString());

            }

       }  catch (Exception ex) {

       }

   }

}
그리고 해당 Java파일만

Export하여 Jar파일 생성해야 함

 

생성하면 CustomErrorReprotValve.jar 가 생성됨

(상기 Maven의 jar가 하나라도 누락시 오류가 나니 오프라인에서는 모두 있는지 반드시 확인)


이후 tomcat의 Server.xml에 다음 부분을 찾아 추가

(단일 host를 가정함)

 

<Host name="localhost" ...

           errorReportValveClass ="com.gunamis.config.CustomErrorReportValve">

...

</Host>

 

그리고 톰캣 재시작.. 반드시 재시작..

 

그러면.. 400, 505에 대한 페이지는 Custom으로 처리됨.