728x90
728x90
[Servlet & JSP] 에러 처리
@WebServlet("/404error")
public class Error404Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendError(404,"페이지를 찾을 수 없습니다.");
}
}
response 객체의 sendError 메소드를 통해서 의도적으로 error code와 error message를 응답할 수 있다.
위와 같은 톰캣에서 제공하고 있는 에러 페이지를 볼 수 있다.
우리가 직접 만든 에러 페이지를 보여주고 싶은 경우 별도의 처리가 필요하다.
error-page라는 element 하위에 error-code에 상태코드를 location에 요청할 서블릿 경로를 설정한다.
request 객체를 통해서 attribute라는 일종의 저장소에서 값을 저장하고 가져올 수 있다.
request의 getAttributesNames메소드를 통해서 attribute의 key를 확인해보면 javax.servlet.error.status_code와 javax.servlet.error.message라는 key가 있다.
이 key값을 request의 getAttrubute에 전달하면 value인 error status code와 error message를 가져올 수 있다.
@WebServlet("/errorPage")
public class ExceptionHandlerServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
StringBuilder errorPage = new StringBuilder();
errorPage.append("<!doctype html>\n")
.append("<head>\n")
.append("</head>\n")
.append("<body>\n")
.append("<h1>\n")
.append(request.getAttribute("javax.servlet.error.status_code"))
.append(" - ")
.append(request.getAttribute("javax.servlet.error.message"))
.append("</h1>\n")
.append("</body>\n")
.append("</html>");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print(errorPage);
out.flush();
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
동적 페이지를 만들어서 응답하는 과정은 동일하다.
POST요청이 왔을 때 doPost 메소드에서 doGet메소드를 호출하여 어떤 요청이 오더라도 동일한 로직 처리를 할 수 있다.
위와 같이 직접 제작한 에러 페이지를 볼 수 있게된다.
728x90
반응형
'Backend > Servlet & JSP' 카테고리의 다른 글
[Servlet & JSP] 서블릿 cookie와 session (0) | 2023.05.24 |
---|---|
[Servlet & JSP] 서블릿 forward와 redirect (0) | 2023.05.23 |
[Servlet & JSP] 서블릿의 역할 (0) | 2023.05.21 |
[Servlet & JSP] Servlet parameter 사용 방법 (0) | 2023.05.20 |
[Servlet & JSP] Servlet doGet과 doPost (0) | 2023.05.19 |
댓글