중요!!★
에러 페이지에 해당하는 JSP 페이지의 page 디렉티브에 isErrorPage="true"를 꼭 해줘야 함
1) readParameterNoErrorPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page errorPage="/error/viewErrorMessage.jsp" %>
<!--
JSP는 실행 도중 exception이 발생 시
오류 화면 대신 지정한 JSP페이지를 보여줄 수 있음.
-->
<!DOCTYPE html>
<html>
<head>
<title>파라미터 출력</title>
</head>
<body>
<!--
name 파라미터가 없으면 request.getParameter("name")은 null을 리턴하므로
실행도중 문제가 생겨 NullPointerException을 발생시킴
500에러 : 코드문제
404에러 : 페이지 없음(URL잘못 입력하거나, 페이지 안만듬)
-->
name 파라미터 값 :
<%
// try{
request.getParameter("name").toUpperCase();
// }catch(Exception ex){
// out.print("name 파라미터가 올바르지 않습니다.");
// }
%>
</body>
</html>
2) viewErrorMessage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page isErrorPage="true" %>
<!--
에러 페이지에 해당하는 JSP페이지는 page 디렉티브의
isErrorPage 속성의 기본값을 true로 지정해야함
-->
<!DOCTYPE html>
<html>
<head>
<title>오류 발생</title>
</head>
<body>
<!-- isErrorPage="true"를 하면 exception 기본 객체를 사용할 수 있음 -->
오류가 발생했습니다. <br>
빠른 시간 내에 문제를 해결하도록 하겠습니다.<br>
<!-- exception 기본 객체의 클래스 이름을 출력함 -->
오류 타입 : <%=exception.getClass().getName() %><br>
<!-- 오류 메시지를 출력 -->
오류 메시지 : <%=exception.getMessage() %><br>
</body>
</html>
1) noParameterError.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page errorPage="/error/noParamEx.jsp"%>
<!DOCTYPE html>
<html>
<head>
<title>파라미터가 없는 오류가 발생함</title>
</head>
<body>
<%
/*
- /error/noParamEx.jsp를 생성하여 오류를 처리해보자
- noParamEx.jsp에는 적당한 오류 이미지를 넣어보자.
- 이미지는 chapter06 폴더에 넣은 후 <img>태그로 처리해 보자
*/
String memId = request.getParameter("memId").toUpperCase();
String memName = request.getParameter("memName").toUpperCase();
%>
</body>
</html>
2) noParamEx.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<title>파라미터 없음, 이미지 처리</title>
</head>
<body>
오류 발생 <br>
<%
if("java.lang.NullPointerException".equals(exception.getClass().getName())){
%>
오류타입 : <%=exception.getClass().getName() %><br>
오류메시지 : <%=exception.getMessage() %><br><br>
<img alt="image" src="nullpointException.png">
<%
}
%>
</body>
</html>
파라미터가 없기 때문에 errorPage에 적힌 noParamEx.jsp의 페이지가 보여짐
1) web.xml에 지정
2) noParameterWeb.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>파라미터 없는 오류 처리(web.xml)</title>
</head>
<body>
<%
String memId = request.getParameter("memId").toString();
%>
</body>
</html>
3) errorNullPointer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>NULL 에러 발생</title>
</head>
<body>
<img alt="null" src="/error/null.png" />
<!--
만약 에러 페이지의 길이가 512바이트보다 작으면,
인터넷 익스플로러는 이 페이지가 출력하는 에러 페이지를 출력하지 않고
자체적으로 제공하는 HTTP 오류 메시지 화면을 출력함.
인터넷 익스플로러에서도 에러 페이지 내용을 올바르게 출력하려면
응답 결과에 이 주석과 같은 내용을 포함해서
에러 데이터가 512 바이트를 넘도록 해야 함.
-->
</body>
</html>
- 파라미터가 없기 때문에 null 에러 남
page 디렉티브의 errorPage가 없기 때문에 web.xml의 exception-type이 실행 됨 => errorNullPointer.jsp의 화면이 출력됨
- 인터넷 익스플로러의 경우, 에러 페이지의 길이가 512바이트보다 작으면 자체적으로 제공하는 HTTP 오류 메시지 화면을 출력함
1) web.xml에 지정
2) error404.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>요청 페이지 없음</title>
</head>
<body>
404오류가 발생했습니다.
<br>
<img alt="404" src="/error/404error.jpg">
<!--
만약 에러 페이지의 길이가 512바이트보다 작으면,
인터넷 익스플로러는 이 페이지가 출력하는 에러 페이지를 출력하지 않고
자체적으로 제공하는 HTTP 오류 메시지 화면을 출력함.
인터넷 익스플로러에서도 에러 페이지 내용을 올바르게 출력하려면
응답 결과에 이 주석과 같은 내용을 포함해서
에러 데이터가 512 바이트를 넘도록 해야 함.
-->
</body>
</html>
- 페이지 경로를 a.jsp로 했을 경우(a.jsp 존재하지 않음)
3) error500.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>JSP에서 에러 발생</title>
</head>
<body>
500오류가 발생<br>
<img alt="500" src="/error/500error.png">
<!--
만약 에러 페이지의 길이가 512바이트보다 작으면,
인터넷 익스플로러는 이 페이지가 출력하는 에러 페이지를 출력하지 않고
자체적으로 제공하는 HTTP 오류 메시지 화면을 출력함.
인터넷 익스플로러에서도 에러 페이지 내용을 올바르게 출력하려면
응답 결과에 이 주석과 같은 내용을 포함해서
에러 데이터가 512 바이트를 넘도록 해야 함.
-->
</body>
</html>
- body 안에 <%= r%> 이라고 작성하여 익셉션을 발생 시킨 경우