▸JSP & Servlet/기본 문법

JSP 내장 객체_pageContext / exception [3/4]

코데방 2020. 2. 16.
728x90

[ JSP 내장 객체 ]

  • 개발자가 객체를 별도로 생성하지 않아도 JSP에서 바로 사용할 수 있는 객체
  • 컨테이너가 JSP를 서블릿으로 변환할 때 자동으로 객체가 생성됨
  • request, response, out, page, config, application, pageContext, exception, session

내장 객체는 말 그대로 JSP가 기본적으로 내장하고 있어서 따로 선언하거나 만들어줄 필요 없이 바로 사용 가능한 객체를 말합니다. 당연한 말이지만 모두 Java의 클래스 객체이므로 서블릿에서도 동일하게 사용이 가능합니다. 서블릿에서는 자동으로 생성되는 내장 객체는 아니지만 대부분 get 메소드를 이용해 객체를 얻어낼 수 있습니다. 

 

전반적인 구조에 대한 아래 링크글을 먼저 참조하시면 좀 더 이해가 수월할 수 있습니다.

 

JSP 내장객체의 구조와 생명주기 (session / config / application )

 

 


 

 

 

[ pageContext - javax.servlet.jsp.JspContext 객체]

 

실제로 사용할일은 거의 없는 내장 객체입니다. 우리가 사용하는 내장객체는 실제로 pageContext 객체를 통해 생성되는데 이 부분은 이미 설계가 되어 있고 개발자는 그냥 사용만 하면 됩니다. 예를 들어 pageContext 객체를 통해 request2 객체를 하나 생성하고, 원래 있던 request 객체와 동일한지 비교해보면 같은 값임을 알 수 있습니다.

 

객체를 관계 연산자 '=='로 비교하는 것은 해당 객체의 메모리 주소를 비교하는 것이므로 같은 메모리 주소를 점유한 동일 객체라는 것을 알 수 있습니다. pageContext의 get 메소드들이 싱글톤 패턴으로 구성돼 있다는 것을 짐작할 수 있습니다. 싱글톤 패턴은 특정 클래스에서 생성하는 객체를 단 하나만 만들도록 설계된 디자인 패턴을 말합니다.

 

		ServletRequest request2 = pageContext.getRequest();
		System.out.println(request == request2);

 

 


 

 

[ exception - java.lang.Throwable 객체]

 

JSP 페이지에서 예외가 발생했을 때 처리해줄 수 있는 객체입니다. 기본적으로 영어 메세지가 가득한 톰캣의 예외 발생 화면이 뜨는데 이를 좀 더 이쁜(?) 페이지로 바꿔주는 역할을 합니다.

 

 

* page 지시자를 이용한 예외 처리 페이지 등록

 

예외 발생 시 넘겨줄 페이지를 지시자로 지정할 수 있습니다. 딱딱한 톰캣 페이지 대신 미리 만들어둔 페이지가 출력됩니다. 아래 코드와 같이 넘어갈 예외 페이지를 설정해줄 수 있습니다.

<%@ page errorPage = "exceptionEX.jsp" %>

 

예외를 처리하는 페이지에도 지시자를 통한 예외 페이지 설정을 해줘야 합니다. 필수 사항입니다. 아랫줄의 setStatus() 메소드는 이 페이지는 정상 페이지임을 알려주기 위한 설정입니다. 서버에서 예외를 처리하기 위한 페이지 자체를 예외가 발생된 페이지로 잘 못 인식하는 경우가 있어서 셋팅해줍니다.

<%@ page isErrorPage = "true" %>
<% response.setStatus(200); %>

 

 

* web.xml에서 지정하는 방법

 

초기화 설정값에서 예외 페이지를 설정해줍니다. 조금 번거롭지만 만약 예외 처리 페이지가 바뀌게 되면 예외 페이지를 호출하는 쪽(서비스되는 페이지)의 소스를 수정하지 않고도 변경할 수 있다는 장점이 있습니다. 또한 예외 코드에 따라 서로 다른 페이지로 이동시킬 수 있습니다. 이 방법에서는 호출하는 쪽에서는 지시자를 통해 예외 페이지를 설정할 필요가 없지만 예외 페이지는 위와 같이 page 지시자와 setStatus() 메소드를 설정해줘야 합니다. JSP페이지마다 errorPage를 설정하는 것보다는 이 방법이 더 편리할 수 있습니다.

	<error-page>
		<error-code>500</error-code>
		<location>/exceptionPage500.jsp</location>
	</error-page>
	
	<error-page>
		<error-code>404</error-code>
		<location>/exceptionPage404.jsp</location>
	</error-page>

 

 


 

 

exception 객체는 지시자, web.xml, 어노테이션을 통해 이 페이지가 예외를 처리하기 위한 페이지임을 명시해야만 사용할 수 있습니다. 그냥 JSP 페이지에서는 사용이 불가능합니다.

 

exception 주요 메소드 설명
String getMessage() 발생한 예외의 메세지 리턴
String toString() 발생한 예외 클래스 및 예외 메세지 리턴
void printStackTrace() 발생한 예외 역추적을 위한 예외 스트림 출력 (서버에 출력)
void printStackTrace(PrintWriter s) 발생한 예외 역추적을 위한 예외 스트림 출력 (클라이언트에게 출력)

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page errorPage = "exceptionPage.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%
		int a = 4 / 0;
	%>

</body>
</html>
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page isErrorPage="true"%>
<%response.setStatus(200);%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>


	<%!
		String exceptionMsg;
		String str;
	%>

	<%
		
		exceptionMsg = exception.getMessage();
		str = exception.toString();
	%>

	예외가 발생했습니다. ㅈㅅㅈㅅ <br/>
	예외 내용 : <%=exceptionMsg%> <br/>
	예외 클래스 및 내용 : <%= str %>

</body>
</html>

 

728x90

댓글

💲 추천 글