다연이네

[days05] JSP 예외처리 본문

JSP

[days05] JSP 예외처리

 다연  2020. 12. 29. 18:12
반응형

JSP 예외처리
1. 예외처리
2. 에러 페이지
3. 상태 코드 (404,  500, 405 등 에러 코드 번호)와 예외 타입(null~)별로 예외 페이지 지정해서 예외 처리

 

 

예외처리 우선순위 
페이지 지시자의 에러페이지 지정 > 예외 타입 > 예외 코드 > 웹 컨테이너가 제공하는 기본 에러페이지

 

 

 1. 예외처리 

try~catch를 이용하는 방법

<body>
<h3>ex01_02</h3>
> name : 
<%
try{
%>
<%=request.getParameter("name").toUpperCase() %>
<%
}catch(NullPointerException e){
	System.out.print(e.toString()); //콘솔창에 뿌려짐
}catch(Exception e){
	e.printStackTrace(); //페이지에 뿌려짐
}
%>

</body>


브라우저에서 바로 요청을 하면(바로 위 파일을 F11하면) 파라미터가 없기 때문에 HTTP 상태 500예외가 발생한다.

(500번대 : 자바 코딩 오류)
왜냐하면 파라미터가 안 넘어와 null 값을 가졌는데, 그 값을 toUpperCase()하고자 할 때 오류가 났기 때문이다.
따라서 try~catch로 코딩을 묶어주고 NullPointerException이 발생하는 경우 콘솔창에 해당 메시지를 출력하도록 오류처리를 해준다면 페이지에서 오류는 나타나지 않게 된다.


파라미터가 존재하는 경우
파라미터가 없는 경우
콘솔창에 에러메시지 출력

 

 

 

 2. 에러페이지 

예외를 처리하는 에러 페이지 설정

<%@page errorPage="파일 위치" %>

<%@page errorPage="/error/viewErrorMessage.jsp" %> <!-- 얘  -->

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex01_03</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="">
<style>
</style>
<script>
   $(document).ready(function (){     
   });
</script>
</head>
<body>
<h3>ex01_03</h3>
> name : <%=request.getParameter("name").toUpperCase() %>

</body>
</html>

파라미터가 없어서 예외가 발생하는 경우 예외를 처리하는 에러 페이지로 이동한다.

 

viewErrorMessage.jsp

<%@page isErrorPage="true" %> <!-- 이거 넣어주기  -->

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="">
<style>
</style>
<script>
   $(document).ready(function (){     
   });
</script>
</head>
<body>
요청 처리 과정에서 에러가 발생했습니다. <br>
빠른 시간 내에 문제를 해결하도록 하겠습니다. 
<p>
	에러타입: <%=exception.getClass().getName()%> <!-- exception: JSP기본내장객체 -->
	에러메시지: <%=exception.getMessage()%> 
</p>
</body>
</html>

파라미터가 없어서 예외페이지 화면을 출력

 

 

 

 3. 상태 코드와 예외 타입별로 예외 페이지 지정해 예외 처리 

 

error404.jsp

<%@page isErrorPage="true" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="">
<style>
</style>
<script>
   $(document).ready(function (){     
   });
</script>
</head>
<body>
<h3>error404.jsp</h3>
요청한 페이지는 존재하지 않습니다.<br>
주소를 올바르게 입력했는지 확인 바랍니다.
</body>
</html>

error500.jsp

<%@page isErrorPage="true" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="">
<style>
</style>
<script>
   $(document).ready(function (){     
   });
</script>
</head>
<body>
<h3>error500.jsp</h3>
서버 내부 에러 발생했습니다.
</body>
</html>

errorNullPointer.jsp

<%@page isErrorPage="true" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="">
<style>
</style>
<script>
   $(document).ready(function (){     
   });
</script>
</head>
<body>
<h3>errorNullPointer.jsp</h3>
널 포인터 예외 발생
</body>
</html>

이렇게 하나하나 에러코드나 에러타입 별로 jsp파일을 만들었다.

각 파일마다 상단에 <%@page errorPage="error/error404.jsp" %>로 삽입해도 되지만, 한 번에 하는 방법이 있다.

 

web.xml에 가서 추가하면 된다.

 <!-- 응답 상태 코드별로 에러 페이지 설정  -->
  <error-page>
  	<error-code>404</error-code>
  	<location>/error/error404.jsp</location>
  </error-page>
  <error-page>
  	<error-code>500</error-code>
  	<location>/error/error500.jsp</location>
  </error-page>

  <!-- 예외 타입별로 에러 페이지 설정 -->
  <error-page>
  	<exception-type>java.lang.NullPointerException</exception-type>
  	<location>/error/errorNullPointer.jsp</location>
  </error-page>

 

반응형
Comments