티스토리 뷰

JSP/인프런 JSP

13. 예외 페이지

GrapeMilk 2020. 2. 18. 23:10

 

1. 예외 페이지의 필요성

 - Java에서 에러발생에 대비하여 try/catch 등을 통해 예외처리를 하는 것 처럼, JSP와 Servlet를 실행할 때도 예외가 발생 할 수 있기 때문에 예외 처리를 함

 - 예외적인 상황이 발생했을 경우 사용자에게 알려주기 위해 웹컨테이너(톰캣)에서 제공되는 기본적인 예외페이지가 보여짐.

 - 기본 예외페이지는 사용자로 하여금 불쾌한 이미지를 줄 수 있고, 해당 사이트의 재방문률이 하락할 수 있음.

 - 예외 처리를 통해 에러페이지를 보다 친근한 느낌이 들도록 유도할 수 있음.

 

2. page지시자를 이용한 예외 처리

 - <%@ %> page 지시자 : page의 속성을 담당하는 지시자.

 - <%@ page errorPage= "errorPage.jsp"%> : page 지시자 안에서 사용하는 속성. 현재 페이지에서 error가 발생하면 특정 페이지(errorPage.jsp)로 이동하라는 의미 (에러 발생 페이지에 작성)

 - 따라서 page errorPage="페이지명"을 통해, error가 발생했을 때, 딱딱한 기본에러페이지가 아닌 원하는 페이지를 노출할 수 있다. 

 

2-1 page지시자 예외 처리 예시

1) 에러 발생 페이지

 - 연산에 에러가 있어 500에러를 발생시킴.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
    
<%@ page errorPage="errorPage.jsp" %> 

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	
	<%
		int i = 40/0; //에러를 발생시킴 
	%>

</body>
</html>

2) 에러 페이지

 - <%@ page isErrorPage= "true" %> : (에러가 발생하여 넘어온 페이지에 작성) true를 명시하지 않으면 defalut 값이 false로 설정되어 있기 때문에 exception 객체를 사용할 수 없게 됨.

 - <% response.setStatus(200); %> : 정상적인 page임을 나타내어 사용자에게 보여질 에러 페이지가 실행될 수 있게 함. (기본에러메세지를 보면, Http Status 옆에 500이 적혀 있는 것을 알 수 있다. 500은 연산수행에 문제가 있다는 것을 나타내는의미로, 200은 정상적인 page임을 나타냄) 

 - <% response.setStatus(200); %>코드를 작성하지 않으면 웹브라우저에서 500으로 status값을 세팅하는 경우가 있기 때문에 에러 페이지가 출력되지않는 경우가 있음 따라서 정상적으로 error페이지를 실행하기 위해 setStatus(200)코드가 필요함. 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page isErrorPage="true" %>
<% response.setStatus(200); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	에러 발생<br />
	<%= exception.getMessage() %>	//에러 코드를 받아옴
	
</body>
</html>

 

3) 실행결과

 

3. web.xml 파일을 이용한 예외 처리 

 - web.xml파일에 에러시 처리할 코드들을 명시하여 모든 jsp파일에 적용함

 

 

1) web.xml 파일에 코드 명시 

 - <error-code> 404 : 404에러가 발생하면

 - <location>: 특정 페이지로 보낸다

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>errorHandling</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <error-page>
  	<error-code>404</error-code>
  	<location>/error404.jsp</location>
  </error-page>
  <error-page>
  	<error-code>500</error-code>
  	<location>/error500.jsp</location>
  </error-page>
</web-app>

2) 에러 발생 페이지

 - page지시자 방식과 달리 <%@ page errorPage= "errorPage.jsp"%>가 없음. 해당 역할을 xml파일에 있는 코드가 수행함.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!-- <%@ page errorPage= "errorPage.jsp"%> -->
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>

	<%
		int i = 40/0;
	%>

</body>
</html>

 

3) 에러 페이지 (error500.jsp)

 - <% response.setStatus(200); %> : 생성한 에러페이지를 띄울때 page방식이든 web방식이든 코드를 설정해 주어야 한다. 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<% response.setStatus(200); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
여기는 500 에러 페이지 입니다.
</body>
</html>

4) 실행 결과 

 

* page 방식과 web방식이 겹칠 경우엔?

 - web.xml을 이용하여 예외처리를 설정하면 같은 프로젝트에 있는 모든 jsp파일에 영향을 미치기 때문에, 동일 프로젝트내에 있는 jsp파일에 page태그를 이용하여 처리할 경우 page태그가 있는 jsp파일은 page태그가 우선시 되고, 나머지 page태그가 없는 파일에서 발생한 에러는 web.xml에 적혀진 코드에 따라 에러페이지를 출력한다. 

'JSP > 인프런 JSP' 카테고리의 다른 글

16. 데이터베이스 -1  (0) 2020.02.21
14. 자바 빈  (0) 2020.02.19
12. 세션  (0) 2020.02.15
11. 쿠키  (0) 2020.02.13
10. 액션태그  (0) 2020.02.12
댓글