글
Tomcat9 400,505 redirect issues. ErrorReportValve
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으로 처리됨.