본문 바로가기
IT/JSP

[JSP] - 21. 에러 처리(pageContext, 응답코드, 타입) 하는 방법

by 차이나는 개발자 2020. 7. 24.
728x90
반응형

#에러 처리(pageContext, 응답코드, 타입) 하는 방법

 

 

#JSP는 실행 도중 익셉션이 발생할 때 같은 에러 화면 대신 지정한 JSP 페이지를 보여 줄 수 있는 기능을 제공한다.

 

 

#예외처리의 목적

-프로그램의 정상적인 종료를 유도한다.

 

 

#PageContext 에러 처리

-jsp페이지 별로 에러페이지 지정 

 

 

#에러 페이지(try)

<%@= errorPage="" %> 

-예외 발생시 어떤 페이지를 보여줄 것인지 지정할 수 있다.

 

 

#에러처리 페이지(catch)

<%@ page isErrorPage = "true" %>    

-isErroPage = true : 에러페이지로 허락한다.

 

 

#exception객체

(전달받은 예외객체를 표현하는 객체) <-기본객체(isErrorPage="true")일때만 사용이 가능하다. (필수가 아니다)

exception객체를 사용할때만 isErrorPage="true"를 지정한다.

exception.getClass().getName()
: Reflection(반사)

 

 

1. 에러 페이지(readParameter.jsp)

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page errorPage ="/viewErrorMsg.jsp" %>    
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>파라미터 출력</title>
</head>
<body>
	<!-- name존재하지 않아서 NullPointerException 발생 -->
	name 파라미터 값 : <%= request.getParameter("name").toUpperCase() %>
	
</body>
</html>

 

 

2. 에러 처리 페이지(viewErrorMsg.jsp)

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page isErrorPage = "true" %>    
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>에러 발생</title>
</head>
<body>
	요청 처리 과정에서 에러가 발생하였습니다.<br/>
	빠른 시간 내에 문제를 해결하도록 하겠습니다.
	<p>
	에러 타입 :<%= exception.getClass().getName() %><br>
	에러 메시지: <b><%= exception.getMessage() %></b>
</body>
</html>

 

 

-결과 화면

 

 

#인터넷 익스플로러에서는 다르게 처리해야한다.
-응답의 상태 코드가 400, 404나 500에러코드이고

에러페이지가 512바이트보다 작으면 자체에러페이지를 보여준다.

 

 

#응답 타입별로 에러 페이지 지정하기(web.xml)

-웹 어플리케이션 전체영역

-응답코드로 처리해서 isErrorPage가 필요없다. 

<error-page>
	<error-code>404</error-code>
    <location>/error/error404.jsp</location>
</error-page>

 

 

#주요 응답상태 코드

응답 코드 설명
200 요청을 정상적으로 처리한다
307 임시로 페이지를 리다이렉트한다
400 클라이언트의 요청이 잘못된 구문으로 구성된다
401 접근을 허용하지 않는다
404 요청한 URL을 처리하기 위한 자원이 존재하지 않는다
405 요청한 메서드(GET, POST, HEAD 등의 전송방식)를 허용하지 않는다
500 서버 내부 에러가 발생한다
(예를 들어, JSP에서 익셉션이 발생한다.)
503 서버가 일시적으로 서비스를 제공할 수 없다

 

 

#익셉션 타입별로 에러 페이지 지정하기(web.xml)

<error-page>
	<exception-type>java.lang.NullPointException</exception-type>
    <location>/error/errorNullPointer.jsp</location>
</error-page>

 

 

#에러페이지 우선 순위

#1순위 page디렉티브 

#2순위 타입 > 응답

#3순위 응답

#아무것도 없으면 자체 페이지가 나온다.

 

 

#버퍼와 에러페이지의 관계

문제

-첫번째 버퍼가 플러시되면 헤더를 수정할수 없다. (정상수행된것처럼 넘어간다)

 

해결

-버퍼가 플러시 된 이후에 익셉션이 발생하면 에러 페이지가 원하는 형태로 출력되지 않는다.

따라서, 익셉션이 발생하기 전에 버퍼가 플러시 될 가능성이 있다면 버퍼 크기를 늘려서 에러가 발생하기 전에 버퍼가 플러시 되지 않도록 해야한다.

 

 

 

728x90
반응형

댓글