삶 가운데 남긴 기록 AACII.TISTORY.COM
web.xml 서블릿 오류 처리 본문
서블릿 오류 처리
오류를 처리할 페이지를 web.xml에 지정하면 오류가 발생하면 해당 페이지로 이동시킵니다.
try-catch와 중복으로 설정한다면 try-catch문이 우선 처리 됩니다.
try-catch문은 해당 블록만 오류를 처리하는 반면 web.xml은 웹 어플리케이션 전체에 대해 처리할 수 있습니다.
web.xml에 <error-page> 태그가 설정되어 있을 때 <error-cod>나 <exception-type>에 지정한 오류가 발생하면 <location>태그에 지정된 오류 페이지가 실행됩니다.
web.xml에 다음과 같은 태그를 추가합니다.
<error-page>
<error-code>404</error-code>
<location>/errorHandle</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/errorHandle</location>
</error-page>
이어서 오류를 처리할 errorHandle을 위해 ErrorHandleServlet.java를 작성합니다.
package net.aacii.test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/errorHandle")
public class ErrorHandleServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("text/html;charset=UTF-8");
PrintWriter out = res.getWriter();
Integer code = (Integer)req.getAttribute("javax.serlvet.error.status.code");
String message = (String)req.getAttribute("javax.servlet.error.message");
Object type = req.getAttribute("javax.servlet.error.exception.type");
Throwable exception = (Throwable)req.getAttribute("javax.servlet.error.exception");
String uri = (String)req.getAttribute("javax.servlet.error.request_uri");
out.print("<h2>Error Code : "+code+"</h2>");
out.print("<h2>Error Message : "+message+"</h2>");
out.print("<h2>Error Type : "+type+"</h2>");
out.print("<h2>Error Object : "+exception+"</h2>");
out.print("<h2>Error URI : "+uri+"</h2>");
out.close();
}
}
없는 URL을 입력하면 404 에러가 나면서 에러 처리 페이지가 열리는 것을 확인해봅시다.
728x90
'DEV&OPS > Java' 카테고리의 다른 글
JSP 내장 객체 (0) | 2022.06.21 |
---|---|
JSP (0) | 2022.06.20 |
리스너 Listener (0) | 2022.06.20 |
필터 Filter (0) | 2022.06.15 |
request 상태 정보 유지 (0) | 2022.06.15 |