낭만 프로그래머
Tomcat 9 에서 에러(ERROR) 페이지 설정 본문
Tomcat 에서 에러 페이지 설정하는 방법은 일반적으로 web.xml 을 수정해야 함. 하지만 모든 경우에 적용되는 것이 아니라고 하여 server.xml 을 수정하면 된다고 하니 적용해 보자
방법 1. {Tomcat설치폴더}/conf/server.xml 에 적용
* 주의 : jsp 파일을 사용할 수 없으며 html 파일을 사용해야 함
...
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<!-- 에러페이지 처리 방식 추가 -->
<Valve className="org.apache.catalina.valves.ErrorReportValve"
showReport="false"
showServerInfo="false"
errorCode.0="C:\servers\apache-tomcat-9.0.36\webapps\ROOT\error.html"/>
<!-- -->
</Host>
...
방법 2. Custom으로 {Tomcat설치폴더}/conf/server.xml 에 적용
* JSP파일을 사용할 수 있음
a. ErrorReportValue를 상속 받은 CustomErrorReportValue 생성
package com.ariulsoft.tomcat.config;
import javax.servlet.RequestDispatcher;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.valves.ErrorReportValve;
public class CustomErrorReportValve extends ErrorReportValve {
private String errorPagePath = "./error.jsp";
public void setErrorPagePath(String errorPagePath) {
this.errorPagePath = errorPagePath;
}
@Override
protected void report(Request request, Response response, Throwable throwable) {
int statusCode = response.getStatus();
if (statusCode >= 400) {
try{
RequestDispatcher dispatcher = request.getRequestDispatcher(errorPagePath);
dispatcher.forward(request, response);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
b. jar 파일 생성하여 {Tomcat설치폴더}/lib 폴더에 복사
c. {Tomcat설치폴더}/conf/server.xml 파일 수정
- errorReportValveClass="com.ariulsoft.tomcat.config.CustomErrorReportValve" 추가
...
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
errorReportValveClass="com.ariulsoft.tomcat.config.CustomErrorReportValve">
...
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
...
</Host>
...
방법 3. {Application 패스}/WEB-INF/web.xml 에 적용
...
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
...
* JSP 에러페이지에서 항상 200을 전달해야 할 경우 아래 내용을 추가
..
<%
response.setStatus(HttpServletResponse.SC_OK);
%>
..
<참고> 테스트 해본 결과 방법1(또는 방법2) 과 방법3을 동시에 적용하였을 경우 방법3이 우선순위를 가진다.
'Java > Tomcat' 카테고리의 다른 글
Tomcat 9 에서 외부 Directory를 URL로 매핑 (0) | 2022.04.27 |
---|---|
Web에서 Quartz를 사용하여 스케쥴링 하기 (0) | 2020.09.21 |
Tomcat에서 ROOT로 Context 변경하기 (0) | 2020.01.07 |
Tomcat에서 server.xml 파일에 UTF-8 설정하기 (0) | 2019.12.30 |
Tomcat에 UTF-8로 Encoding 설정 (0) | 2015.07.07 |