본문 바로가기

카테고리 없음

[웹프] 스크립트 태그

복습) *JSP 프로그램이 HTML로 변하는 것이 아님. JSP프로그램을 톰캣이 실행시킨 결과물로 HTML이 되는 것임. 톰캣이 JSP프로그램을 JAVA 프로그램으로 변환하고, 그 자바 프로그램을 실행하면 결과물로 HTML이 나오는 것임.

 

JSP페이지 안에는 HTML / JSP / JAVA 언어 3가지를 사용할 수 있다.

각 언어를 작성하는 방법이 다르니 하나하나 알아보자.

 

먼저, JAVA 언어를 JSP 페이지 안에서 사용하는 방법을 배워보자. JSP에서 JAVA코드를 넣는 방법은 3가지이다.

선언문 : <%! ... %> // ... 부분에 완벽한 JAVA 코드가 들어간다.

스크립틀릿 : <% ... %> // ...부분에 완벽한 JAVA코드가 들어간다.

표현문 : <%= ... %>

 

 

스크립틀릿 <% ...; %>

<html>
<head>
<title>스크립트틀릿</title>
</head>
<body>
	<h2>Tag TEST</h2>
		
    <%
	for(int i = 1; i <= count; i++) {
   		out.println("Java Server Pages " + i + "<br>");
    	}
	%>
</body>
</html>

*System.out.println() 메소드는 콘솔창에 출력.

*out.println() 메소드는 HTML 파일에 출력.

JSP 파일을 실행시키면, 톰켓이 실행 시킨 후, HTML

<html>
<head>
<title>스크립트틀릿</title>
</head>
<body>
    <h2>Tag TEST</h2>
    
    Java Server Pages 1<br>
    Java Server Pages 2<br>
    Java Server Pages 3<br>

</body>
</html>

스크립틀릿 태그로 작성한 JAVA 언어는 그대로 카피 돼서 jspService 메소드 안에 들어감. p61 2번 처리부

즉, <% %> 부분은 메소드 안에 작성되는 코드인 것이다.

그럼 JAVA에서 메소드 정의를 할 때 안에 클래스 정의를 할 수 있었나? 할 수 없었다.

그럼 JAVA에서 메소드 정의를 할 때 안에 메소드 정의를 할 수 있었나? 할 수 없었다.

그렇기 때문에 <% %> 부분에도 클래스 정의나 메소드 정의하는 코드가 들어가서는 안 된다.

*변수는 선언 가능

 

그렇다면 메소드를 정의하는 방법은 없을까? 그것이 바로 선언문 태그이다.

 

선언문 태그 <%! ...; %>

선언문 태그로 작성한 JAVA 언어는 그대로 카피 돼서 scripting 클래스 안에 들어감. p61 1번 선언부

클래스 안에는 변수 선언, 메소드 선언이 모두 가능했고, 이를 우리는 JAVA에서 소속변수, 소속메소드라고 했었다.

 

여기서 선언문과 스크립틀릿 태그에서 사용하는 변수의 차이점이 드러난다.

선언문에서 정의되는 변수는 클래스의 소속변수가 되고, 스크립틀릿 태그에서 정의되는 변수는 메소드 내에서만 사용 가능한 변수이다.

만약 변수를 소속 변수로 정의한다면 메소드 안에서 마음대로 불러다 쓰는 것이 가능하다.

 

표현문 태그 <%= ... %>  // ; 붙이지 않음

근데 HTML에 출력할 문장이 굉~장히 많으면 어떻게 할까? 스크립틀릿 태그를 이용하여 out.println() 함수를 여러 번 사용할까? 만약 페이지에 출력하는 문장이 100개라면? 100개 다 out.println() 함수를 이용할 것인가? 

 

이런 불편함을 줄여주기 위해 등장한 것이 표현문태그이다.

표현문 태그로 작성한 JAVA 언어는 그대로 카피 돼서 out.print 메소드의 매개변수로 안에 들어감. p62 3번 출력부

매개변수로 전달될 때 ; 이 전달되었었나? 아니다. 그렇기 때문에 ; 는 사용하면 안 된다.

 

p.72 에 있는 것처럼 표현문 태그 안에는 자바코드가 아닌 JSP 코드가 들어갈 수도 있다. 이 부분을 나중에 자바코드로 풀어줄 뿐이기 때문에, 표현문 태그는 자바코드가 들어가는 위치에 들어가서는 안 된다.

 

주석처리

JSP 프로그램 안에는 JAVA, HTML, JSP 언어가 들어간다고 했다. 주석처리는 각각 언어마다 그에 맞는 주석처리를 해주어야 한다.

JSP주석태그 <%-- 주석처리 --%>
HTML주석 <!-- 주석처리 -->
JAVA 주석 <* 주석처리 *> or //

주석문은 실행결과에 영향을 주지 않는다.

다만, 언어마다 주석의 생존주기가 다르다.

 

<!-- HTML 주석 처리 -->
<html>
<head>
<title> TEST </title>
<body>
<h2> TEST </h2>
<%-- JSP 주석 태그 --%>

<%
	//JAVA 주석
%>
</body>
</html>

다음과 같이 3가지의 주석문이 사용되었다고 가정해보자.

 

이 JSP프로그램을 통해 톰캣은 자바 클래스로 변환된다.

톰캣이 자바 클래스로 변환되는 과정에서 JSP 주석이 떨어진다.

 

그리고 자바클래스를 실행하면 결과물로 HTML 문서가 만들어진다.

이때 자바 클래스를 실행하는 단계에서 JAVA 주석은 떨어진다.

 

HTML 주석은 만들어질 때까지 있는데 웹 브라우저로 페이지를 보게 될 때 안 보인다. (그것이 주석문의 역할...)

다만, 웹 브라우저에서 페이지 소스 보기를 하게 되면 그 주석문이 보게 된다.

 

즉, 어떤 종류의 주석을 다느냐에 따라 최종 단계 사용자가 그 주석을 볼 수 있는지 없는지가 달라진다.

*서로 개발자들끼리 함께 작업하는 경우, 주석문으로 시스템 서버의 중요한 핵심정보를 담아두는 경우가 있다. 이때 HTML 주석으로 달면 중요한 내용들을 사용자들이 볼 수 있다는 문제가 생긴다.