일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 표현 언어
- 동기화
- 아이디중복
- Linux세팅
- 상관서브쿼리
- String char[] 형변환
- interrupted()
- 상관 서브 쿼리
- include지시자
- interrupt()
- Linux셋팅
- include 지시자
- InputDialog
- MemoryStream
- first-child
- 메모리스트림
- StringReader
- char[] String 형변환
- first-of-child
- include액션태그
- isinterrupted()
- sleep()메소드
- 리눅스셋팅
- 리눅스세팅
- ObjectInputStream
- Daemon()
- StringWriter
- ID중복
- 스레드그룸
- ThreadGroup()
- Today
- Total
다연이네
[days05] JSP 예외처리 본문
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>
'JSP' 카테고리의 다른 글
[days05] 자바 빈즈(Java Beans) (0) | 2020.12.29 |
---|---|
[days05] 페이지 모듈화 - <%@include %>지시자와 <jsp:include>액션태그 (0) | 2020.12.29 |
[days04] 웹 어플리케이션의 4가지의 영역(scope) (0) | 2020.12.28 |
[days04] JSP 기본 내장 객체 1. request 2. response 3. out 4. pageContext 5. application (0) | 2020.12.28 |
[days04] 출력 버퍼, 배포 (0) | 2020.12.28 |