본문 바로가기

JSP, Servlet, MySQL/JSP - webmarket

JSP Servlet 예외 처리 : 예외 처리 페이지 만들기 -2

728x90
반응형

웹 쇼핑몰 - 예외 처리 페이지 만들기

 

 

 

[page디렉티브 태그에 errorPage속성을 이용하여 오류페이지 호출하기]

1. 오류페이지 작성하기 

 

exceptionNoProductId.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
	<title>상품 아이디 오류 </title>
</head>
<body>
	<jsp:include page="menu.jsp"/>
	<div class = "jumbotron">
		<div class = "container">
			<h2 class="alert alert-danger">해당 상품이 존재하지 않습니다. </h2>
		</div>
	</div>
	<div class = "container">
	
	<!-- 오류가 발생했을 때 해당 오류 페이지를 출력하도록 표현문 태그에 request 내장 객체의 getRequestURL()메소드를 작성한다. 
		또한 요청 파라미터를 출력하도록 표현문 태그에 request 내장 객체의 getQueryString()메소드를 작성한다.  -->
		<p><%=request.getRequestURL()%>?<%=request.getQueryString() %>
		<p><a href="products.jsp" class="btn btn-secondary">상품 목록&raquo;</a>	
	</div>
	<hr>
	<%@ include file ="footer.jsp" %>
</body>
</html>

 

 

2. 상품 상세보기 페이지 수정하기 : product.jsp

 

<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="dto.Product" %>
<%@ page import="dao.ProductRepository" %>
<%@ page errorPage="exceptionNoProductId.jsp" %><!--페이지가 실행되는 도중에 오류가 발생했을 때 
오류 페이지 호출할수있도록 page디렉티브 태그에 errorPage 속성을 작성-->

 

전체

<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="dto.Product" %>
<%@ page import="dao.ProductRepository" %>
<%@ page errorPage="exceptionNoProductId.jsp" %>
<%-- <jsp:useBean id="productDAO" class="dao.ProductRepository" scope="session"/> --%>
<html>
<head>
<!-- <link rel="stylesheet" href="./resources/css/bootstrap.min.css"> -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
	<title>상품 상세 정보 </title>
</head>
<body>
	<%@ include file ="menu.jsp" %>
	
	
	
	<div class = "jumbotron">
		<div class = "container">
			<h1 class="display-3">상품 정보 </h1>
		</div>
	</div>
	
	<%
		String id = request.getParameter("id");
		//Product product = productDAO.getProductById(id); //자바빈즈 사용 
		
		
		//ProductRepository 클래스의 객체변수 instance 를 호출하는 getInstance()메소드를 작성한다.
		//이를 통해 getProductById()메소드를 호출하여 반환 결과 값을 Product객체타입의 변수 Product에 저장한다. 
		ProductRepository dao = ProductRepository.getInstance();
		Product product = dao.getProductById(id);
		
	%>
	
	<div class = "container">
		<div class="row">
			<div class="col-md-5">
				<img src="/Users/hansollee/jspimg/<%=product.getFilename()%>" style="width:100%">
			</div>
			
			<div class="col-md-6">
				<h3><%= product.getPname() %></h3>
				<p><%= product.getDescription() %>
				<p> <b> 상품 코드 : </b> <span class="badge badge-danger">
					<%= product.getProductId() %></span>
				<p><b>제조사</b> : <%=product.getManuFacturer() %>
				<p><b>분류</b> : <%=product.getCategory() %>
				<p><b>제고 수</b> : <%=product.getUnitsInStock() %>
				<h4><%=product.getUnitPrice() %>원</h4>
				<p> <a href="#" class="btn btn-info">
					상품 주문  &raquo;</a> 
					 <a href="./products.jsp" class="btn btn-secondary">
					상품 목록  &raquo;</a> 
			</div>
			
		</div>
		<hr>
	</div>
	
	<jsp:include page="footer.jsp"/>
</body>
</html>

 

3. 프로젝트 실행하기

 


 

[web.xml 파일에 오류 코드로 오류 페이지 호출하기]

1. web.xml 파일에 추가 작성하기

 

web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
	<security-role> 
		<description></description>
		<role-name>admin</role-name>
	</security-role>
	<security-constraint>
		<display-name>WebMarket Security</display-name>
		<web-resource-collection>
			<web-resource-name>WebMarket</web-resource-name>
			<description></description>
			<url-pattern>/addProduct.jsp</url-pattern>
		</web-resource-collection>
		<auth-constraint>
			<description>권한 관리자명</description>
			<role-name>admin</role-name>
		</auth-constraint>
	</security-constraint>
	<login-config>
		<auth-method>FORM</auth-method> 
		<form-login-config>
			<form-login-page>/login.jsp</form-login-page>
			<form-error-page>/login_failed.jsp</form-error-page>
		</form-login-config>
	</login-config>
	<error-page><!--오류가 발생했을 때 오류 상태와 오류 페이지를 출력하도록 작성한다.-->
		<error-code>404</error-code><!--오류가 발생했을 때 오류 코드 400을 설정하도록 <error-code> 요소를 작성-->
		<location>/exceptionNoPage.jsp</location><!--오류가 발생했을 떄 오류페이지 exceptionNoPage.jsp를 호출하도록
        <location>요소를 작성-->
	</error-page>
</web-app>

 

 

2. 오류 페이지 작성하기 

 

exceptionNoPage.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
	<title>페이지 오류  </title>
</head>
<body>
	<jsp:include page="menu.jsp"/>
	<div class = "jumbotron">
		<div class = "container">
			<h2 class="alert alert-danger">요청하신 페이지를 찾을 수 없습니다. </h2>
		</div>
	</div>
	<div class = "container">
	
	
		<p><%=request.getRequestURL()%></p>
		<p><a href="products.jsp" class="btn btn-secondary">상품 목록&raquo;</a>	
	</div>
	<hr>
	<%@ include file ="footer.jsp" %>
</body>
</html>

 

3. 프로젝트 실행하기

 

웹 브라우저에 'http://localhost:8080/WebMarket/productss.jsp' 를 입력하여 실행 결과를 확인한다. 

 

 


 

요약

 

01 예외 처리의 개요

  • 예외를 처리하는 프로그램이 처리되는 동안 특정한 문제가 발생했을 때 처리를 중단하고 다른 처리를 하는 것으로 오류 처리라고도 한다. 

02 page 디렉티브 태그를 이용한 예외 처리

  • errorPage 속성으로 오류 페이지 호출하기 : errorPage속성은 오류 페이지를 호출하는 page디렉티브 태그의 속성으로 형식은 다음과 같당.
<%@ page errorPage="오류 페이지 URL"%>
  • isErrorPage 속성으로 오류 페이지 만들기: isErrorPage 속성은 현재 JSP페이지를 오류 페이지로 호출하는 page디렉티브 태그의 속성으로 형식은 다음과 같다.
<%@ page isErrorPage = "true" %>

 

03 web.xml 파일을 이용한 예외 처리

  • web.xml파일을 이용한 예외 처리는 web.xml 파일을 통해 오류 상태와 오류 페이지를 보여주는 방법이다. 
  • 오류 코드로 오류 페이지 호출하기
<error-page>
	<error-code>오류 코드</error-code>
    <location>오류 페이지의 URI</location>
</error-page>

 

  • 예외 유형으로 오류 페이지 호출하기
<error-page>
	<exception-type>예외 유형</exception-type>
    <location>오류 페이지의 URI</location>
</error-page>

 

 

04 try-catch-finally를 이용한 예외 처리

  • try-catch-finally 는 자바의 예외 처리 구문으로 스크립틀릿 태그에 작성하며 형식은 다음과 같다. 
try{
	//예외가 발생할 수 있는 실행문
}
catch{
	//예외 처리문
}
[finally{
	//예외와 상관없이 무조건 실행되는 문장(생략 가능)
}]
728x90
반응형