BLOG ARTICLE jsp | 28 ARTICLE FOUND

  1. 2009.03.04 설명문
  2. 2009.03.03 연산자
  3. 2009.03.03 변수, 상수, 자료형
  4. 2009.01.06 JSP 처리과정
  5. 2008.12.03 JSP 기본구조

설명문

프로그래밍/JSP 2009. 3. 4. 17:45

모든 프로그래밍 언어는 이해를 돕기위해 프로그램의 수행과는 관계없는 설명문을 달 수 있다. JSP역시 JSP 태그 "<% ~ %>" 내부에서는 java의 설명문을 위한 표시인 "//", "/* ~ */" 을 따른다. 그러나 JSP 태그 외부에서는 "<%-- ~ --%>"를 이용한 JSP 만의 고유 설명문과 "<!-- ~ -->"를 이용한 HTML 설명문이 사용된다. JSP 고유 설명문과 HTML 설명문의 차이점은 JSP 프로그램 실행후 소스보기로 확인했을 때 JSP 고유 설명문의 경우 소스보기로 확인할 수 없으며, HTML 설명문의 경우 소스보기로 확인 가능하다는 점이다.


JSP 태그 내부에서 사용되는 설명문


java 설명문

// 뒤에 1줄 짜리 설명문이 위치하며 줄이 바뀌면 설명문이 끝난다.

/* 사이에 설명문이 위치하며 1줄 이상의 설명문에 사용된다. */


JSP 태그 외부에서 사용되는 설명문

JSP 설명문

<%-- 이 부분은 1 줄 이상 가능한 JSP 설명문으로 소스보기로 볼 수 없습니다. --%>

HTML 설명문

<!-- 이 부분은 1 줄 이상 가능한 HTML 설명문으로 소스보기로 볼 수 있습니다. -->


다음 "comment1.jsp" 프로그램은 JSP에서 사용한 설명문의 예를 보여주고 있다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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>
<!-- 이 부분은 HTML 설명문으로 소스보기로 볼 수 있습니다. -->
<body>
<%-- 이 부분은 JSP 설명문으로 소스보기로 볼 수 없습니다. --%>
<%
int kor=90, eng=100, mat=80; // 국어, 영어, 수학 (1줄 설명문)
double avg; // 평균 (1줄 설명문)

/*******************************
  국어, 영어, 수학 점수를 합산하여
  3으로 나눈 후 평균을 구한다.
 *******************************/

avg = (kor+eng+mat)/3;
%>
평균 : <%= avg /* 평균점수를 출력한다. */ %> 점
</body>
</html>

사용자 삽입 이미지

comment1.jsp 실행결과


사용자 삽입 이미지

comment1.jsp 실행 후 소스보기 결과



위 프로그램에서는 "<!-- ~ -->"부분의 HTML 설명문과 "<%-- ~ --%>"부분의 JSP 고유 설명문 그리고 Java 설명문에서 비롯된 "//"를 사용한 설명문 2개와 "/* ~ */"를 사용한 설명문 2개 총 6개의 설명문이 사용되었다.

"<!-- 이 부분은 HTML 설명문으로 소스보기로 볼 수 있습니다. -->"

"<%-- 이 부분은 JSP 설명문으로 소스보기로 볼 수 없습니다. --%>"

"// 국어, 영어, 수학 (1줄 설명문)"

"// 평균 (1줄 설명문)"

"/*******************************
  국어, 영어, 수학 점수를 합산하여
  3으로 나눈 후 평균을 구한다.
 *******************************/"

"/* 평균점수를 출력한다. */"

위 프로그램에서 HTML 설명문의 경우 소스보기에서 볼 수 있으나, JSP 고유 설명문의 경우 소스보기에서 볼 수 없다. 그리고 JSP 태그 내부에서 한 줄 설명문 사용 시 주의해야 할 점이 있다. 마지막 설명문을 보면 "/* 평균점수를 출력한다. */"의 경우 한 줄 설명문 이지만 여러 줄 설명문을 위한 "/* ~ */"를 사용하고 있는데, 이 경우 한 줄 설명문을 위한 "//"를 사용하면 안된다는 점이다. 우선 다음 프로그램 "comment2.jsp"의 결과를 보자.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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>
<!-- 이 부분은 HTML 설명문으로 소스보기로 볼 수 있습니다. -->
<body>
<%-- 이 부분은 JSP 설명문으로 소스보기로 볼 수 없습니다. --%>
<%
int kor=90, eng=100, mat=80; // 국어, 영어, 수학 (1줄 설명문)
double avg; // 평균 (1줄 설명문)

/*******************************
  국어, 영어, 수학 점수를 합산하여
  3으로 나눈 후 평균을 구한다.
 *******************************/

avg = (kor+eng+mat)/3;
%>
평균 : <%= avg // 평균점수를 출력한다. %> 점
</body>
</html>

사용자 삽입 이미지

comment2.jsp 실행결과


실행 결과 기대와는 달리 오류메세지만 출력하고 있다. 그 이유는 한 줄 설명을 위한 "//" 처리는 줄의 마지막까지를 설명문으로 간주하기 때문이다. 따라서 위 프로그램의 경우

"평균 : <%= avg // 평균점수를 출력한다. %> 점"

부분에서 설명문은 "// 평균점수를 출력한다." 부분이 아닌 "// 평균점수를 출력한다. %> 점"까지가 설명문으로 취급된다. 따라서 "<%=" 태그에 의해 열린 부분이 있으면 "%>"로 마무리 되야 하는데 "// 평균점수를 출력한다. %> 점" 부분의 "%>" 역시 프로그램의 수행과는 전혀 상관없는 즉 닫힌 JSP 태그로 인식되는 것이 아니라 단지 설명문의 한 부분르로 처리되어 "comment2.jsp"의 마지막 까지 닫힌 JSP 태그인 "%>"를 찾을 수 없기 때문에 오류를 발생시키는 것이다. 따라서 "comment2.jsp"가 올바르게 실행되기 위해서는 "comment3.jsp"와 같이 수정돼야 한다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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>
<!-- 이 부분은 HTML 설명문으로 소스보기로 볼 수 있습니다. -->
<body>
<%-- 이 부분은 JSP 설명문으로 소스보기로 볼 수 없습니다. --%>
<%
int kor=90, eng=100, mat=80; // 국어, 영어, 수학 (1줄 설명문)
double avg; // 평균 (1줄 설명문)

/*******************************
  국어, 영어, 수학 점수를 합산하여
  3으로 나눈 후 평균을 구한다.
 *******************************/

avg = (kor+eng+mat)/3;
%>
평균 : <%= avg // 평균점수를 출력한다.
%> 점
</body>
</html>

사용자 삽입 이미지

comment3.jsp 실행결과



'프로그래밍 > JSP' 카테고리의 다른 글

switch 문  (1) 2009.03.09
if 문  (0) 2009.03.05
연산자  (0) 2009.03.03
변수, 상수, 자료형  (0) 2009.03.03
JSP 처리과정  (0) 2009.01.06
AND

연산자

프로그래밍/JSP 2009. 3. 3. 16:08
연산자는 수학적 또는 논리적 연산을 수행하는데 사용되는 기호를 의미한다. 다음과 같은 변수의 선언

int a = 10 ;

에서 "="는 int 형 변수 a메 초기값 10을 저장하라는 의미를 가지는 대입연산자 입니다. 이와 같은 연산자 중 자주 사용되는 연산자로는 크게 산술연산자, 대입연산자, 증감연산자, 비교연산자, 논리연산자 등이 있다.

산술연산자

산술연산자는 일반적인 수학계산을 위해 사용되는 연산자로 연산을 위해 두 개의 값이 필요한 이항연산자이다.

+ 더하기 10 + 2  10
- 빼기 10 - 2  8
* 곱하기 10 * 2  20
/ 나누기 10 / 2  5
% 나머지 10 % 2  0

다음은 사칙연사자를 사용한 "arithmetic_op.jsp" 프로그램의 예와 그 결과를 보여주고 있다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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>
<%
int a = 10, b = 2, c;
c = a + b;
%>
초기값 : a = 10, b = 2<br>
a + b = 10 + 2 =<%= c %><br>
<% c = a - b; %>
a - b = 10 - 2 = <%= c %><br>
<% c = a * b; %>
a * b = 10 * 2 = <%= c %><br>
<% c = a / b; %>
a / b = 10 / 2 = <%= c %><br>
<% c = a % b; %>
a % b = 10 % 2 = <%= c %><br>
</body>
</html>


사용자 삽입 이미지

arithmetic_op.jsp 실행결과



대입연산자

대입 연산자는 연산자를 기준으로 우변의 결과를 좌변의 변수에 저장하라는 의미를 가지며 지정연산자라고도 불린다. 대입연산자는 우변의 결과를 저장해야 하므로 좌변은 반드시 변수 또는 배열이 와야 한다. 지정연산자 역시 좌변과 우변이 필요한 이항연산자이다.

=   a = b + c   b + c 를 더한 결과를 a 에 저장
+=  a += b   a = a + b 
-=  a -= b   a = a - b
*=  a *= b   a = a * b
/=  a /= b   a = a / b
%=  a %= b  a = a % b

다음 프로그램 "assign_op.jsp"는 다양한 대입연산자를 사용한 예를 보여주고 있다. 이 예에서 대입산자의 우변이 또 다른 수식일 경우 우변을 먼저 계산한 후 그 결과를 가지고 좌변의 변수에 저장된 값과 대입연산자와 연관된 계산을 수행해야 한다. 결과에 그 과정도 함께 나타내고 있다. 이 프로그램에서 대입연산자에 의해 변수 c의 값이 계속 변한다는 점을 유의하자.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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>
<%
int a = 3, b = 2, c = 0;
%>
초기값 : a = 10, b = 2<br>
c+=a+b => c=c+(a+b) => c=<%=c%>+(<%=a%>+<%=b%>) => c =
<% c += a + b; %><%= c %><br>
c-=a-b => c=c-(a-b) => c=<%=c%>-(<%=a%>-<%=b%>) => c =
<% c-= a - b; %><%= c %><br>
c*=a+b => c=c*(a+b) => c=<%=c%>*(<%=a%>+<%=b%>) => c =
<% c *= a + b; %><%= c %><br>
c/=a+b => c=c/(a+b) => c=<%=c%>/(<%=a%>+<%=b%>) => c =
<% c /= a + b; %><%= c %><br>
c%=a+b => c=c%(a+b) => c=<%=c%>%(<%=a%>+<%=b%>) => c =
<% c %= a + b; %><%= c %><br>
</body>
</html>


사용자 삽입 이미지

assign_op.jsp 실행결과



증감연산자

증감연산자는 주어진 변수의 값을 1 증가 또는 1 감소 시키는 연산자이다. 증감연산자는 연산자를 중심으로 좌변 또는 우변 중 하나의 변에만 변수가 올 수 있는 단항연산자이다.

++   ++a 또는 a++  변수 a의 값을 1 증가
--   --a 또는 a--  변수 a의 값을 1 감소

위 예에서와 같이 연산자가 앞에 또는 뒤에 올 수 있는데 다른 식과 함께 쓰일 경우 그 결과가 달라질 수 있음에 주의하자.

다음 프로그램 "incdec_op.jsp"는 증감연산자가 변수 앞에 사용될 때와 변수 뒤에 사용될 때의 차이점을 보여주고 있다. 증감연산자가 변수 앞에 사용되면 변수의 값을 먼저 증가 또는 감소 시킨후 나머지 작업을 처리하고, 뒤에 사용되면 다른 작업을 처리한 후 변수의 값을 후에 증가 또는 감소 시킨다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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>
<% int a = 10; %>
a : <%= a %><br>
a++ : 출력 후 1 증가 : <%= a++ %><br>
a : <%= a %><br>
++a : 1 증가 후 출력 : <%= ++a %><br>
a : <%= a %><br>
a-- : 출력 후 1 감소 : <%= a-- %><br>
a : <%= a %><br>
--a : 1 감소 후 출력 : <%= --a %><br>
a : <%= a %><br>
</body>
</html>


사용자 삽입 이미지

incdec_op.jsp 실행결과



비교연산자

비교연산자는 양 변의 값의 크기를 비교하는데 사용되는 연산자로 이항연산자이다. 이 연산자를 이용한 연산결과는 true(참), false(거짓)의 불린형으로 반환된다.

==  양 변 값의 크기가 같으면 true(참)
<   우변 값의 크기가 좌변 값의 크기보다 크면 true(참)
<=  우변 값의 크기가 좌변 값의 크기와 같거나 큰면 true(참)
>    우변 값의 크기가 좌변 값의 크기보다 작으면 true(참)
>=   우변 값의 크기가 좌변 값의 크기와 같거나 작으면 true(참)
!= 양 변 값의 크기가 다르면 true(참)'

다음 프로그램 "compare_op.jsp"는 비교연산자의 예를 보여주고 있다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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>
3 == 3L : <%= 3 == 3L %><br>
3 < 3L : <%= 3 < 3L %><br>
3 <= 3L : <%= 3 <= 3L %><br>
3 > 3.0 : <%= 3 > 3.0 %><br>
3 >= 3.0 : <%= 3 >= 3.0 %><br>
3.0 != 3.0F : <%= 3.0 != 3.0F %><br>
</body>
</html>


사용자 삽입 이미지

compare_op.jsp 실행결과



논리연산자

논리연산자는 놀리곱(and), 논리합(or), 부정(not)과 같은 논리연산을 위한 연산자로, 결과값으로 true(참), false(거짓)를 반환한다.

&&  논리곱   양변 모두가 true(참)인 경우에만 true(참)
||   논리합   양변 중 하나면 true(참)이면 true(참)
!  부정  true(참)은 false(거짓), false(거짓)는 true(참)

다음 프로그램 "logical_op.jsp"는 논리연산자의 사용 예를 보여주고 있다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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>
! true : <%= ! true %><br>
! false : <%= ! false %><br>
<br>
true && true : <%= true && true %><br>
true && false : <%= true && false %><br>
false && true : <%= false && true %><br>
false && false : <%= false && false %><br>
<br>
true || true : <%= true || true %><br>
true || false : <%= true || false %><br>
false || true : <%= false || true %><br>
false || false : <%= false || false %><br>
</body>
</html>


사용자 삽입 이미지

 

'프로그래밍 > JSP' 카테고리의 다른 글

if 문  (0) 2009.03.05
설명문  (0) 2009.03.04
변수, 상수, 자료형  (0) 2009.03.03
JSP 처리과정  (0) 2009.01.06
JSP 기본구조  (0) 2008.12.03
AND

자료형 (Data Type)

자료형이란 변수나 상수가 저장할 수 있는 자료의 형식을 의미한다. 당연한 얘기지만 JSP 프로그래밍에서의 자료형은 Java의 그것과 완전히 동일하다. 자료형은 크게 숫자형, 문자형 그리고 불형으로 구분할 수 있다.

숫자형 (Numeric Type)

숫자형은 크게 정수를 위한 자료형과 실수를 위한 자료형으로 구분되며 숫자를 표현할 수 있는 크기에 따라 다음과 같이 구분됩니다.

정수형 (Integer Type)

byte (8 bit) -128 ~ 127
short (16 bit) -32,768 ~ 32,767
int (32 bit) -2,147,483,648 ~ 2,147,483,647
long (64 bit) -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

실수형 (Floating-point Type)

float (32 bit)
double (64 bit)

위 정수형에서 알 수 있듯 숫자 자료형의 크기가 커질 수록 표현가능한 숫자의 범위도 커집니다. 따라서 실수형에서도 마찬가지로 표현 가능한 실수의 범위가 float 보다 double 이 더 크고 정밀한 수의 표현이 가능 합니다. 여기서 정밀하다는 의미는 소수점 아래로 더 많은 숫자를 표현할 수 있다는 의미를 뜻합니다.

문자형 (Character Type)

문자형은 UTF-16 문자를 저장하기 위한 자료형으로 양의 정수를 의미하기도 한다. Sun에서 제공하는 Java 문서에서는 이 자료형을 정수형(Integer Type)에 포함시키고 있다.

char (16 bit) '\u0000' ~ '\uffff' 또는 0 to 65535

불린형 (Boolean Type)

불린형은 논리값, 즉 참(true)과 거짓(false)을 저장하기 위한 자료형이다.


상수 (Constant)

상수란 프로그램 언어에서 표현되고 처리되어지는 값을 의미하며 자료형과 밀접한 관계를 가진다. 각 자료형과 관계된 상수의 표현은 다음과 같다.

정수형 상수

정수형 상수 중 byte, short, int 형 상수는 123, 1, -2134, -1234124과 같이 표현한다. 그러나 long 형 상수는 1L, -922L, 83423L과 같이 byte, short, int 형 상수에 'L'을 붙여 표현한다.

실수형 상수

실수형 상수는 소수점을 가진 수자로 doble 형 상수는 3.14, 0.0, 100.0 등과 같이 표현하고 float형 상수는 3.14F, 0.0F, 100.0F 등과 같이 double 형 상수에 'F'를 붙여 표현한다.

문자형 상수

문자형 상수는 일반적으로 작은 인용부호 "'" 안에서 표현된다. 예를 들면 'A', '\u0041'와 같이 표현된다. 또한 문자형 상수는 양의 정수를 의미한다고도 하였기 때문에 65와 같이 표현할 수도 있다. 그러나 큰 인용부호 """ 안에 표현된 "A", "ABC" 등과 같은 문자들은 문자형 상수가 아니라 String 클래와 관련되어진 문자열이므로 주의해야한다. String 클래스에 대해서는 후에 주체적으로 다루겠다.


변수 (Variable)

변수란 프로그래밍 언어에서 자료를 저장하고 접근하기 위해 이름이 붙여진 식별자로 내부적으로는 기억공간 즉 메모리를 의미한다. JSP에서의 변수 역시 Java의 형식과 같으며, 사용전에 반드시 자료형과 함께 선언되야 한다.
변수의 이름에 해당되는 식별자는 다음과 같은 규칙을 가진다.

1. 식별자는 영어, 숫자, 또는 "_"로 구성된다.
2. 식별자의 시작은 반드시 영문자 또는 "_"로 시작되어야 하며 숫자로 시작되어서는 안된다.
3. 예약어와 같은 키워드는 식별자로 사용할 수 없다.

다음은 올바른 식별자와 잘못된 식별자를 보여주고 있다.

변수명으로 사용이 가능한 식별자
A, A0, student, Std_no, _def

변수명으로 사용할 수 없는 잘못된 식별자

5a : 숫자로 시작
if : 예약어
a#no : 특수문자(#) 포함

변수의 선언

변수는 자료형과 함께 다음과 같은 형식으로 선언된다.

int a ;
byte b, B = 0 ;
long distance = 1000L ;

첫 번째 선언에서 식별자 a는 int 형의 자료를 저장할 수 있는 변수를 의미한다. 따라서 변수 a는 -2,147,483,648 ~ 2,147,483,647 사이의 정수값을 가질 수 있다.

두 번째 선언에서는 식별자 b과 B가 -128 ~ 127 사이의 값을 가지는 byte 형 변수임을 선언하고 있다. 이와같이 여러개의 변수를 동시에 선언할 때는 각 식별자(변수명)을 ','로 구분 나열하면 된다. Java는 대소문자를 서로 다른것으로 처리하기 때문에 b와 B는 서로 다른 두 개의 변수이다. 그리고 두 번째 변수 B는 대입연산자 '='를 통해 초기값으로 0을 가지도록 선언하고 있다.

세 번째 선언에서는 식별자 distance가 long 형 자료형을 저장하는 변수로 초기값으로 1600을 저장하도록 선언하고 있다. 이 선언에서 long 현 상수를 의미하는 L이 1600 위에 붙어있음를 주의하자.

다음 프로그램 "variables.jsp"과 그 결과를 살펴보자.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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>
<%
int num1 = 100;
double num2 = 100.9;
char a1 = '\u0041', a2 = 'A', a3 = 65;
%>
<%= num1 %>
<%= num2 %>
<%= a1 %>
<%= a2 %>
<%= a3 %>
</body>
</html>


사용자 삽입 이미지

variables.jap 결과


프로그램에서 num1은 초기값 100을 가지는 int 형 변수이며, mun2는 초기값 100.9를 가지는 double형 변수이다. 또한 a1, a2, a3는 초기값을 각각 '\u0041', 'A', 65 를 가지는 char 형 변수이다. 그런데 출력 결과를 보면 num1과 num2는 100과 100.9를 출력하였으나 a1, a2, a3는 \u0041, A, 65가 아닌 모두 A를 출력하고 있다. 이는 표현의 차이에서 비롯된 것으로 컴퓨터 내부적으로는 '\u0041', 'A', 65 모두 같은 값으로 처리되며 이는 문자 'A'를 의미한다. 따라서 모두 A로 출력된 것이다.


'프로그래밍 > JSP' 카테고리의 다른 글

설명문  (0) 2009.03.04
연산자  (0) 2009.03.03
JSP 처리과정  (0) 2009.01.06
JSP 기본구조  (0) 2008.12.03
Hello.html vs. Hello.jsp  (0) 2008.12.01
AND

앞서 웹서버가 웹프로그래밍을 어떻게 처리하는가에 대해 살펴 보았다. JSP 역시 웹프로그램이므로 브라우저의 요청이 발생하면 Tomcat과 같은 JSP 컨테이너에 의해 자바 소스코드인 서블릿 코드로 변환된 후 자바 컴파일러를 통해 컴파일 과정을 거쳐 클래스 파일이 생성되면 해당 클래스 파일을 실행하여 브라우저 요청에 응답한다. 만약 이미 요청한 JSP 페이지와 관련된 클래스 파일이 있으면 서블릿 파일로의 변환과정을 거치지 않고 바로 해당 클래스 파일을 실행하여 브라우저 요청을 처리한다. 아래 순서도는 브라우저 요청에 따른 JSP 실행 단계를 나타낸 것이다.

JSP 실행 단계

JSP 실행 단계


위 순서도를 살펴보면 JSP는 서블릿 코드 생성 단계(translation phase), 컴파일 단계(compile phase), 요청 처리 단계(request processing phase)와 같이 크게 세 단계를 거쳐 실행됨을 알 수 있다.

서블릿 코드 생성 단계에서는 브라우저에서 요청이 발생하면 JSP 컨테이너는 해당 JSP의 클래스파일을 찾는데 만약 해당 클래스 파일을 찾을 수 없는 경우 JSP 페이지가 서블릿 프로그램 코드로 변환된다. 서블릿 프로그램 코드는 자바 소스 코드 형태로 한번 서블릿 코드가 생성되면 해당 JSP 페이지의 내용이 변경될 때까지 이 과정은 수행되지 않는다. 이는 JSP 컨테이너가 자동으로 변경 여부를 판단 처리해 준다.

컴파일 단계에서는 생성된 자바 소스 코드 형태인 서블릿 코드를 실행 가능한 자바 프로그램인 클래스 파일로 변환해 준다.  컴파일 시 JSP 컨테이너는 컴퓨터에 설치된 JDK를 이용하여 컴파일 과정을 실행한다.

요청 처리 단계에서는 브라우저의 요청이 발생하면 컴파일 단계에서 만들어진 서블릿 클래스를 이용 요청을 처리한다.

'프로그래밍 > JSP' 카테고리의 다른 글

연산자  (0) 2009.03.03
변수, 상수, 자료형  (0) 2009.03.03
JSP 기본구조  (0) 2008.12.03
Hello.html vs. Hello.jsp  (0) 2008.12.01
첫 번째 JSP 프로그램  (0) 2008.11.30
AND

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에서 문서의 내용을 생성하기 위해 사용되는 조건문, 반복문 등과 같은 프로그램 요소를 기술하는 부분으로 "<%" ~ "%>" 태그 사이에 위치한다.

'프로그래밍 > JSP' 카테고리의 다른 글

변수, 상수, 자료형  (0) 2009.03.03
JSP 처리과정  (0) 2009.01.06
Hello.html vs. Hello.jsp  (0) 2008.12.01
첫 번째 JSP 프로그램  (0) 2008.11.30
프로젝트와 HTML 파일 만들고 실행하기  (0) 2008.11.28
AND