오류 처리 방법 2가지(try-catch, web.xml)
1)try-catch 로 처리
2)web.xml에서 처리 : 어떤 오류에 대해서 어떻게 처리 할 것이냐?
<error-page>
<error-code></error-code>
<location></location>
</error-page>
<error-page>
<exception-type></exception-type>
<location></location>
</error-page>
-위에서 지정한 error-code나 exception-type의 오류가 발생했을 때, location 에 지정해놓은 페이지로 포워딩 된다. 이 때, 아래의 5가지의 정보(name)를 세팅해서 넘겨준다.(request.setAttribute()
javax.servlet.error.status_code
javax.servlet.error.message
javax.servlet.error.exception_type
javax.servlet.error.exception
javax.servlet.error.request_uri // 오류가 발생한 페이지의 uri 정보를 알려준다.
오류처리 페이지에서는 request.getAttribute()를 이용해 해당 정보들을 가져온다.
ex)
//web.xml
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/errorHandlePage</location>
</error-page>
//ErrorTest.java
@WebServlet("/errorTest1")
public class ErrorTest extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
/*
위에서 지정한 error-code나 exception-type의 오류가 발생했을 때, location 에 지정해놓은 페이지로 포워딩 된다.
이 때, 아래의 5가지의 정보를 세팅해서 넘겨준다.
javax.servlet.error.status_code
javax.servlet.error.message
javax.servlet.error.exception_type
javax.servlet.error.exception
javax.servlet.error.request_uri // 오류가 발생한 페이지의 uri 정보를 알려준다.
*/
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String param = request.getParameter("p");
out.print(param.length());
out.close();
}
}
//ErrorHandlePage.java
@WebServlet("/errorHandlePage")
public class ErrorHandlePage extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
response.setContentType("text/html;charset=utf-8");
response.setStatus(200);
PrintWriter out = response.getWriter();
out.print("<h1>오류처리페이지!</h1>");
String uri = (String)request.getAttribute("javax.servlet.error.request_uri");
Throwable error = (Throwable)request.getAttribute("javax.servlet.error.exception");
out.print(uri+":"+error);
out.close();
}
}