package com.ohgiraffers.section01.exception;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/show404error")
public class Show404ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.sendError(404, "페이지를 찾을 수 없습니당");
}
}
package com.ohgiraffers.section01.exception;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/show500error")
public class Show500ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.sendError(500, "500번 에러는 누구 잘못? 개발자!");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
<error-page>
<error-code>404</error-code>
<location>/showErrorPage</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/showErrorPage</location>
</error-page>
</web-app>
- xml 에 error page code와 location 정의해서 하기 서블릿에서 처리
package com.ohgiraffers.section01.exception;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletMapping;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
@WebServlet("/showErrorPage")
public class ExceptionHandlerServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Enumeration<String> attrName = req.getAttributeNames();
while(attrName.hasMoreElements()){
System.out.println(attrName.nextElement());
}
String forwardRequestURI = (String)req.getAttribute("jakarta.servlet.forward.request_uri");
String contextPath = (String)req.getAttribute("jakarta.servlet.forward.context_path");
HttpServletMapping mapping = req.getHttpServletMapping();
Integer statusCode = (Integer)req.getAttribute("jakarta.servlet.error.status_code");
String message = (String)req.getAttribute("jakarta.servlet.error.message");
String servletName = (String)req.getAttribute("jakarta.servlet.error.servlet_name");
System.out.println(forwardRequestURI);
System.out.println(contextPath);
System.out.println(mapping);
System.out.println(statusCode);
System.out.println(message);
System.out.println(servletName);
System.out.println((String)req.getAttribute("jakarta.servlet.forward.servlet_path"));
System.out.println((String)req.getAttribute("jakarta.servlet.error.request_uri"));
StringBuilder errorPage = new StringBuilder();
errorPage.append("<!doctype html>\n")
.append("<html>\n")
.append("<head>\n")
.append("</head>\n")
.append("<body>\n")
.append("<h1>")
.append(statusCode)
.append(" - ")
.append(message)
.append("</h1>\n")
.append("</body>\n")
.append("</html>");
resp.setContentType("text/html; charset=UTF-8");
PrintWriter out = resp.getWriter();
out.print(errorPage);
out.flush();
out.close();
}
}