글
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으로 처리됨.
글
java Spring 8.2.2 2c.. 어쩌고 에러
more than one fragment.. 어쩌고 저쩌고..
8.2.2 2c of 어쩌고 저쩌고...
Spring 관련 Library 중복으로 인한 내용으로
1. Pom.xml에 중복 선언되어 있는지 확인
2. custom lib폴더에 중복으로 들어있는지 확인
이상
글
Java. Patterh Match를 활용한 확장자 판단
String filename="aaa.pptx";
Pattern pt = Pattern.compile("(doc[x]*$|xls[x]*$|ppt[x]*$|pdf$|png$|jpg$|jpeg$|html$)",Pattern.CASE_INSENSITIVE);
Matcher match = pt.matcher(filename);
if(!match.find()) {
// match.find()의 NOT인경우, 즉 위 해당 확장자가 아닌경우에 처리 할 내용
}