본문 바로가기

IT

8. JSP 에러페이지 처리

* 예외 페이지

  • 예외 상황이 발생했을 경우 웹 컨테이너(톰켓)에서 제공되는 기본적인 예외페이지가 보여진다.
  • 개발 과정에서는 이러한 예외 페이지를 보고 어떤 에러가 발생했는지 알 수 있기 때문에 오류를 수정하는데 도움이 된다.
  • 그러나 사용자에게 상용 서비스를 제공하고 있는데 이러한 딱딱한 페이지가 보여진다면 사용자로 하여금 불쾌감을 일으키고, 해당 사이트에 대한 신뢰도가 하락하게 된다.
  • 또한 코드의 일부가 노출되어 보안 측면에서 좋지 않다.
  • 그래서 개발자가 따로 만들어 둔 에러 페이지로 유도하여 사용자에게 친숙한 페이지를 보여준다.

* HTTP 주요 응답 상태 코드

  • 404 : 요청한 URL을 찾을 수 없을 경우.
  • 500 : 서버측 내부 오류로 인해 페이지가 나타나지 않을 경우(java, JSP페이지 내의 코드오류)
  •  
  • 200 : 요청을 성공적으로 처리함
  • 307 : 임시로 페이지를 리다이렉트함
  • 400 : 클라이언트의 요청이 잘못된 구문으로 작성됨
  • 405 : 요청 방식을 허용하지 않음 (GET, POST등)
  • 503 : 서버가 일시적으로 서비스를 제공할 수 없음 (일시적 서버과부하, 서버 임시 보수 등)

 

* JSP에서 에러를 처리하는 방법

직접 예외를 처리하기

  • 자바의 키워드인 try ~ catch를 사용하여 직접 개발자가 예외를 처리한다.
<!--
try {
	예외 발생 가능성이 있는 코드
} catch (Exception e) {
	예외 발생시 실행될 코드이자 보여줄 화면
} fanally {
 예외 발생 여부와 관계없이 실행되는 코드
 }
-->

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% String id = request.getParameter("id"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<% try { %>
	<h4><%= id.toUpperCase() %></h4>
<% } catch(Exception e) { %>
	<h4>죄송합니다. 서버측 오류가 발생했습니다.</h4>
	<p><strong>잠시만 기다리시면 빠른 시간 내에 해결하겠습니다.</strong></p>
<% } %>
</body>
</html>

 

에러를 처리할 페이지를 따로 지정하기

  • JSP는 실행 도중 예외가 발생할 때 톰캣 기본 에러화면 대신 개발자가 지정한 JSP페이지를 보여줄 수 있는 기능을 제공하고 있다.
  • 에러가 발생하면 보여줄 JSP페이지는 페이지 지시자(directive)의 errorPage속성을 사용하여 지정한다.
  • 예외가 발생할 것으로 예상되는 페이지에 예외가 발생했을 때 보여줄 페이지를 지정한다.
  • ex) <% page errorPage= " 예외가 발생했을 시 보여줄 페이지" %>
  • 에러 발생시 유도된 페이지에는 페이지 지시자태그로 isErrorPage 속성을 사용하여 true로 값을 설정한다.                ex) <% page isErrorPage="true" %>
  • 에러페이지로 지정된 JSP파일 내에서는 예외를 처리해주는 exception 내장객체를 사용할 수 있다.
  • 인터넷 익스플로러 브라우저의 경우 전체 응답 결과의 데이터가 512바이트보다 작을 경우 마이크로소프트에서 자체 제공하는 에러페이지를 출력한다.

error_page01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page errorPage="error_page02.jsp" %> <!--에러발생시 error_page02.jsp로 가겠다.-->

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= request.getParameter("id").toLowerCase() %>
</body>
</html>

error_page02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ page isErrorPage="true" %>
<!-- 이페이지는 에러페이지가 맞습니다. page isErrorPage를 쓰므로 내장객체 exception을 쓸수 있다. -->

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<P>
		요청 처리 과정에서 문제가 발생했습니다. <br/>
		빠른 시간내에 문제를 해결하겠습니다. <br/>
		<strong>잠시만</strong>기다려 주세요.!!
	</P>
	<p>
		에러원인: <em><%= exception.getMessage()%></em>
	</p>
</body>
</html>

그럼 error_page02를 실행시키면 에러페이지와 에러 원인이 출력된다.


3. 응답 상태 코드별로 에러 페이지 지정하기

  • JSP는 에러 코드별로 사용할 에러 페이지를 web.xml파일 수정을 통해 지정할 수 있다.
  • 이렇게 지정한 에러페이지는 일반 jsp파일과 동일하게 작성하면된다.

ex) 아래 코드를 작성후 실행해보면 hello.jsp파일이 없는 상태라 404에러 페이지가 출력된다.

error_get404.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<a href="hello.jsp">404에러 유발!</a>
</body>
</html>

그럼 404에러가 발생시 미리 만들어둔 404 단독 에러 페이지 출력해보자.

 

404에러 발생시 출력되는 페이지를 작성하자.

error_404.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h4> 페이지를 찾을 수 없는 404 페이지 입니다.</h4>

</body>
</html>

 

WEB-INF폴더에 Web.xml에서 설정을 할수 있다. 만약 web.xml이 보이지 않으면

Deployment Descripter > Generate Deployment Descripter stub을 실행시키면 된다.

이제 error_get404.jsp를 실행시키면 hello.jsp파일에 error_404.jsp내용이 출력된다.

 

 

4. 예외 타입별로 에러 페이지 지정하기

발생하는 예외의 종류별로도 에러 페이지를 지정할 수 있다. web.xml파일을 수정한다.


*에러 페이지 우선순위

- 위 에러 페이지들도 우선순위가 있다.

- 에러 페이지를 여러 방법으로 지정한 경우 다음의 우선순위에 따라 사용할 에러 페이지를 선택한다.

 

1. 페이지 지시자 태그의 errorPage속성에 지정한 페이지.

2. web.xml 에 지정한 에러 타입에 따른 페이지

3. web.xml에 지정한 응답 상태 코드에 따른 페이지

4. 위 3항목에 해당하지 않을 경우 톰캣이 제공하는 에러 페이지.