-
[JSP/Servlet] 익셉션 처리(2/2) - web.xml 파일 처리IT/Spring-JSP&Servlet 2020. 10. 28. 03:16
■ 들어가기
- 뇌를 자극하는 JSP&Servlet (김윤명/한빛미디어). 을 공부하며 정리하는 블로그
■ 목차
1. 익셉션 타입별로 에러 페이지를 등록하는 방법
2. HTTP 상태 코드별로 에러 페이지를 등록하는 방법
3. xxxxx
1. 익셉션 타입별로 에러 페이지를 등록하는 방법
- 자바에서 익셉션을 객체로 표현하고 있고,
각각의 익셉션의 타입을 해당 객체의 클래스 타입으로 표현 (참고: 익셉션 타입)
- web.xml 파일에 익셉션 타입별로 에러 페이지 등록 가능하고
등록된 에러 페이지는 해당 익셉션 타입의 익셉션 발생 시 자동으로 호출됨
단, page 지시자 내 errorPage="에러 페이지" 애트리뷰트는 제거해야 한다. (web.xml 설정보다 우선하기 때문)
- web.xml 등록 방법
. 루트 엘리먼트 <web-app> 엘리먼트 내 <error-page> 라는 서브 엘리먼트 작성
. <error-page> 엘리먼트 내 <exception-type>, <location> 라는 서브 엘리먼트 작성
. 각각 익셉션 타입과 에러 페이지의 URL 경로명을 기재
- NumberFormatException 호출 예제 - JSP 페이지
. 두 수의 곱을 구하는 JSP 페이지 : Multiplyer.jsp
. 두 수의 몫을 구하는 JSP 페이지 : Divider.jsp
. 에러 페이지 : NumberFormatError.jsp
<!-- Multiplyer.jsp --> <%@page contentType="text/html; charset=euc-kr" %> <% String str1 = request.getParameter("NUM1") ; String str2 = request.getParameter("NUM2") ; int num1 = Integer.parseInt(str1) ; int num2 = Integer.parseInt(str2) ; int result = num1 * num2 ; %> <html> <head><title>곱셈 프로그램</title></head> <body> <%= num1 %> * <%= num2 %> = <%= result %> </body> </html>
<!-- Divider.jsp --> <%@page contentType="text/html; charset=euc-kr" %> <% String str1 = request.getParameter("NUM1") ; String str2 = request.getParameter("NUM2") ; int num1 = Integer.parseInt(str1) ; int num2 = Integer.parseInt(str2) ; int result = num1 / num2 ; %> <html> <head><title>나눗셈 프로그램</title></head> <body> <%= num1 %> / <%= num2 %> = <%= result %> </body> </html>
<!-- NumberFormatError.jsp --> <%@page contentType="text/html; charset=euc-kr" isErrorPage="true" %> <% response.setStatus(200) ; %> <html> <head><title>숫자 포맷 에러</title></head> <body> 숫자 포맷이 잘못되었습니다. <br><br> 상세 에러 메시지 : <%= exception.getMessage() %> </body> </html>
<!-- web.xml --> <web-app xmlns="http://java.sun.com/xml/ns/javaee" version="3.0"> <error-page> <exception-type>java.lang.NumberFormatException</exception-type> <location>/NumberFormatError.jsp</location> </error-page> </web-app>
> 실행 결과
- 서블릿 클래스에서 발생하는 익셉션도 web.xml에 등록된 에러 페이지를 호출 가능
- doGet, doPost 메서드 안에서 발생한 익셉션을 메서드 밖으로 던지도록 해야함 : try ~ catch 미사용!
- NumberFormatException 호출 예제 - 서블릿 클래스
. 두 수의 몫을 구하는 서블릿 클래스 : DividerServlet
/* DividerServlet.java */ import javax.servlet.http.* ; import javax.servlet.* ; import java.io.* ; public class DividerServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String str1 = request.getParameter("NUM1") ; String str2 = request.getParameter("NUM2") ; int num1 = Integer.parseInt(str1) ; int num2 = Integer.parseInt(str2) ; int result = num1 / num2 ; response.setContentType("text/html; charset=euc-kr") ; PrintWriter out = response.getWriter() ; out.println("<html>") ; out.println("<head><title>나눗셈 프로그램</title></head>") ; out.println("<body>") ; out.printf("%d / %d = %d", num1, num2, result) ; out.println("</body>") ; out.println("</html>") ; } }
<!-- web.xml --> <web-app xmlns="http://java.sun.com/xml/ns/javaee" version="3.0"> <error-page> <exception-type>java.lang.NumberFormatException</exception-type> <location>/NumberFormatError.jsp</location> </error-page> <servlet> <servlet-name>divider-servlet</servlet-name> <servlet-class>DividerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>divider-servlet</servlet-name> <url-pattern>/divider</url-pattern> </servlet-mapping> </web-app>
> 실행 결과
2. HTTP 상태 코드별로 에러 페이지를 등록하는 방법
- 일반적으로 클라이언트(ex.브라우저)에서 요청한 URL에 해당하는 웹 자원이 없는 경우(HTTP상태코드: 404)
was에서 제공하는 기본 에러 페이지를 노출한다.
- HTTP 상태코드에 따라 직접 작성한 에러 페이지를 보여주고자 한다면 web.xml에 등록하여 처리 가능
- web.xml 등록 방법
. 루트 엘리먼트 <web-app> 엘리먼트 내 <error-page> 라는 서브 엘리먼트 작성
. <error-page> 엘리먼트 내 <error-code>, <location> 라는 서브 엘리먼트 작성
. 각각 HTTP 상태코드와 에러 페이지의 URL 경로명을 기재
- HTTP 상태코드 404에러 처리 : NotFoundError.jsp
. 이때 실제 404에러이지만, 에러 페이지 호출을 위해 HTTP 상태코드는 200 으로 변경함
<!-- NotFoundError.jsp --> <%@page contentType="text/html; charset=euc-kr" %> <% response.setStatus(200) ; %> <html> <head><title>페이지 없음 에러</title></head> <body> 해당 페이지를 찾을 수 없습니다. </body> </html>
<!-- web.xml --> <web-app xmlns="http://java.sun.com/xml/ns/javaee" version="3.0"> <error-page> <error-code>404</error-code> <location>/NotFoundError.jsp</location> </error-page> </web-app>
> 실행 결과
'IT > Spring-JSP&Servlet' 카테고리의 다른 글
[JSP/Servlet] 서블릿 라이프 사이클 - init(), service(), doGet(), destroy() (1) 2020.10.29 [java] 익셉션 타입 (0) 2020.10.28 [JSP/Servlet] 익셉션 처리(1/2) - 에러 페이지 처리, JSP/Servlet에서 에러 페이지 호출 (0) 2020.10.28 웹 애플리케이션 - 서블릿& 톰캣 (0) 2020.10.12 JSP 정리 (0) 2020.04.01