JSP - chapter05

ZiSoOm·2021년 7월 20일
0

JSP

목록 보기
9/12

🌍파라미터가 없을 경우 오류 처리

<에러 페이지 처리>

  • 우선 순위 1)
    -page 디렉티브의 errorPage 속성 사용(전용 에러 처리)
  • 우선 순위 2)
    -web.xml 파일의 < exception-type > (범용 에러 처리
  • 우선 순위 3)
    -web.xml 파일의 < error-code > (별도 에러 처리)
  • 우선 순위 4)
    -아무것도 안했을 때는 웹 컨테이너가 제공하는 기본 에러 페이지 보여줌

🌍error code

  • 200 : 요청을 정상적으로 처리함
  • 307 : 임시로 페이지를 리다이렉트함
  • 400 : 클라이언트의 요청이 잘못됨
  • 401 : 접근 허용 안함
  • 404 : 요청한 URL 경로 없음
  • 504 : 요청 메서드(GET, POST 등)를 허용하지 않음
  • 500 : JSP 익셉션 발생
  • 503 : 서버가 일시적으로 서비스 제공 못함(서버 부상, 임시 보수중)

🌍errorPage 속성 사용(1)

중요!!★
에러 페이지에 해당하는 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>

🌍errorPage 속성 사용(2)

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의 페이지가 보여짐

🌍web.xml에 exception-type 사용

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 오류 메시지 화면을 출력함

🌍web.xml의 error-code 사용

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%> 이라고 작성하여 익셉션을 발생 시킨 경우

0개의 댓글