JSP 기본구조

By | 2008년 12월 3일

JSP 파일은 HTML, XML과 같은 템플릿 데이터 부분과 실제 JSP 프로그램 부분으로 구분 할 수 있다. 템플릿 데이터 부분은 JSP 엔진이 인식할 수 없는 태그들로써 브라우저로 그대로 전송되며, 프로그램 부분은 실행된 후 그 출력결과 만이 전송된다. 템플릿 데이터 부분과 JSP 부분의 구분은 “<%”, “%>” 태그를 이용 구분하는데 이 안쪽이 JSP 프로그램 부분이고 바깥쪽은 템플릿 데이터 부분이다.

“Hello.jsp” 예제에서 디스크에 저장된 원본 파일의 내용에서 첫 두 라인


<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
    pageEncoding=”EUC-KR”%>

부분을 보면 “<%”과 “%>” 태그로 둘러싸여 있다. 바로 이 부분이 JSP 프로그램 부분이고, 이 부분이 실행되어 브라우저로 전달된다. 그러나 이 부분에서 실행되어 출력되는 내용은 아무것도 없다. 뒤에 자세히 설명하겠지만 이 부분은 JSP 프로그램에서 디렉티브(Directive)라고 불리는 부분이다.

반면 “Hello.jsp”의 나머지 부분인


<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
Hello HSP…
</body>
</html>

부분은 “<%”, “%>” 태그 바깥쪽에 위치했기 때문에 템플릿 데이터 부분이 된다. 따라서 이 부분의 내용은 그대로 브라우저로 전달된다. 결과적으로 JSP 프로그램 부분과 템플릿 데이터 부분에 의해 브라우저도 전달된 결과는 아래와 같다.


<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
Hello HSP…
</body>
</html>

또 다른 프로그램 “today.jsp”를 살펴보자. 이 프로그램은 현재의 날짜와 시각을 출력하는 JSP 프로그램이다. 아래 소스에서 짙은 회색 블럭으로 된 부분은 JSP 프로그램 부분이다.



<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
    pageEncoding=”EUC-KR”%>

<%@ page import=”java.util.Date” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
<%
Date toDay = new Date();
%>
현재 시간은 <%= toDay %> 입니다.
</body>
</html>



today.jsp 내용

이 프로그램의 실행 결과와 브라우저로 전달된 소스보기의 내용은 다음과 같다.



<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>

현재 시간은 Fri Dec 12 21:16:49 KST 2008 입니다.
</body>
</html>



소스보기 내용

사용자 삽입 이미지

today.jsp 실행결과


“today.jsp”와 브라우저 소스보기 내용을 비교해 보면 “today.jsp” 프로그램에서 “<%= toDay.jsp %>” 부분을 제외한 모든 JSP 프로그램 부분은 브라우저 소스보기에서 확인할 수 없으며, “<%= toDay.jsp %>” 부분도 “Fri Dec 12 21:16:49 KST 2008″과 같이 변경되어 브라우저로 전달됐음을 보여주고 있다. 결론부터 얘기하면 “today.jsp”의 JSP 프로그램 부분에서 실행 된 후 출력된 결과는 “<%= toDay.jsp %>” 부분의 “Fri Dec 12 21:16:49 KST 2008″이다. 그러나 JSP 프로그램의 시작을 알리는 태그의 종류를 보면 “<%@”, “<%”, “<%=” 과 같이 약간의 차이가 있다. 이와 같이 JSP 엔진이 인식해서 처리 작업을 수행해야 하는 태그들을 원소(element)라고 한다. 원소는 지시어 원소(directive element)와 스크립팅 원소(scripting element)로 구분된다.

“<%@” 태그는 디렉티브 원소(directive element)를 알리는 태그로 디렉티브 원소란 JSP 페이지에 대한 설정정보 등을 지정하기 위해 선언되는 부분이다. 스크립팅 원소(scripting element)는 JSP 엔진이 인식해서 처리 작업을 수행해야 하는 태그들을 의미한다. 이 스크립팅 원소는 선언(declaration), 식(expression), 스크립트렛(scriptlet)으로 구분할 수 있다.

선언은 JSP 페이지의 멤버 필드나 메소드를 선언할 때 사용하며, “<%!” ~ “%>” 태그 사이에 위치한다. 식은 변수의 값, 계산 결과, 함수의 호출 결과 등을 직접 출력하기 위해 사용하며, 위 예제 “today.jsp”에서 마지막에 사용된 “<%=” 태그가 식의 시작을 알리는 태그이다. 그러므로 “<%=” ~ “%>” 사이의 내용은 그 결과가 그대로 브라우저로 전달 출력된다. 마지막으로 스크렙트렛은 JSP에서 문서의 내용을 생성하기 위해 사용되는 조건문, 반복문 등과 같은 프로그램 요소를 기술하는 부분으로 “<%” ~ “%>” 태그 사이에 위치한다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.