[JSP] 선언문 / 스크립틀릿 / 표현식

hiyayeah·2023년 1월 8일
0

JSP

목록 보기
2/8

1. 선언문(Declaration) <%! %>

  • JSP 파일 전체 영역에서 사용 가능한 멤버변수 및 메서드를 선언하는 곳
    → 자바 클래스의 멤버레벨(클래스 내부, 메서드 외부)에 변수 및 메서드가 위치하는 것과 동일
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!
String str1 = "멤버(전역) 변수입니다.";

public void method1() {
	System.out.println("선언문 내의 method1() 메서드 호출됨!");
}
	
public String method2() {
	return "method2() 메서드의 리턴값";
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
.
.

2. 표현식 <%= %>

  • 선언문 또는 스크립틀릿 내에서 선언된 변수에 접근하여 값을 출력하거나 리턴값을 갖는 메서드를 호출하여 리턴되는 값을 출력하는 용도로 사용
  • 자바에서 System.out.print( ) 메서드와 동일한 구조, 동일한 역할을 수행
    단, System.out.print( ) 메서드는 이클립스의 콘솔창에 출력되지만 표현식은 웹페이지 내에 출력되므로 JSP 의 out.print( ) 메서드와 동일
<h3>멤버변수 str1 = <%=str1 %></h3>
<h3>method2() 메서드 호출 결과 : <%=method2() %></h3>

<%-- 주의! 리턴값이 없는 메서드(void)는 표현식에서 호출 불가! 오류 발생! --%>
<%-- <h3>method1() 메서드 호출 결과 : <%=method1() %></h3> --%>

💡표현식 내부에는 반드시 출력할 어떤 데이터가 존재해야함


3. 스크립틀릿 <% %>

  • 자바의 실행문을 그대로 표현 가능한 블럭
    → 스크립틀릿 내부는 자바에서 메서드 내부와 동일한 위치
  • 선언되는 변수는 로컬(지역) 변수로 취급됨
  • 메서드는 정의할 수 없다.
  • 자동 생성된 클래스 내에서는 jsp_service( ) 메서드 내에 스크립틀릿 내부 코드가 포함됨
<%
String str2 = "로컬(지역) 변수입니다.";

// 다른 메서드를 호출하거나, 객체(인스턴스) 생성 등의 다양한 작업도 가능함
method1();
	
// System.out.println() 또는 print() 메서드 호출하여 이클립스 콘솔에 내용을 출력
System.out.println("이 문장은 이클립스 콘솔에 출력됩니다.");
	
// out.println() 또는 print() 메서드 호출하여 웹브라우저에 내용 출력 가능
// => 문자열과 함께 HTML 태그도 그대로 사용 가능함
out.println("<h3>스크립틀릿에서 출력한 데이터</h3>");	
%>

💡스크립틀릿 내부에서는 메서드 정의 불가 (=자바에서 메서드 내에 메서드 정의 불가)

// (X) public void method3() { }

4. 활용

4-1. 기능 및 위치

<%-- 선언문보다 윗쪽에서 멤버변수에 접근 가능 --%>
<h3>멤버변수 str3(선언문 위) = <%=str3 %></h3>
	
<%-- 선언문을 사용하여 str3 멤버변수 선언하고 "멤버변수 str3 입니다" 로 초기화 --%>
<%! String str3 = "멤버변수 str3 입니다."; %>

<h3>멤버변수 str3 = <%=str3 %></h3>

💡BUT 스클립틀릿 내부에서 선언되는 변수는 선언 위치보다 위쪽에서 접근 불가

<h3>로컬변수 str2 = <%=str2 %></h3>

<% 
String str2 = "로컬(지역) 변수입니다.";
%>
//🚨해당 코드는 오류 발생

4-2. 스크립틀릿 내에서 선언된 변수를 표현식으로 출력

<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
// 스크립틀릿(자바의 메서드 내부와 동일)
// Calendar 클래스를 사용하여 현재 시각을 시, 분, 초로 분리하여 가져오기
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY); // 시
int min = c.get(Calendar.MINUTE); // 분
int sec = c.get(Calendar.SECOND); // 초

%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%-- 스크립틀릿 내에서 선언된 변수는 표현식으로 출력 가능 --%>
	<h3>현재시각 : <%=hour %><%=min %><%=sec %></h3>

4-3. 스크립틀릿 내에서 자바 실행문 사용

  • if, while 문 등도 사용 가능
    → HTML 태그를 특정 조건에서만 실행되도록 하려면 if문 블록과 HTML 태그를 조합하여 조건에 따른 HTML 문장 실행

✍️자바 코드와 HTML 태그 조합 방법 2가지

  1. 스크립틀릿 내에서 출력할 데이터만 out.println() 메서드로 출력하는 방법
    → HTML 태그보다 자바 코드가 더 많을 경우 주로 사용
  2. 스크립틀릿 내에서 조건문 등의 실행문을 지정하고 블럭문 내의 스크립틀릿 분리하여 스크립틀릿 외부에 HTML 태그 작성
    → 자바 코드보다 HTML 태그가 더 많을 경우 주로 사용
<%-- 
1. 스크립틀릿 내에서 out.println() 메서드를 사용하여 태그를 문자열로 지정하는 방법
--%>

<%
	// if 문을 사용하여 현재 시각(hour)이 12 미만이면 "오전입니다" 출력하고
	// 아니면 "오후입니다" 출력

	if(hour < 12) {
		out.println("<h3>오전입니다.</h3>");
	} else {
		out.println("<h3>오후입니다.</h3>");
	}
%>

<%-- 
2. 스크립틀릿으로 if문만 표현하고, 블록문 사이에 스크립틀릿을 단절시킨 후 HTML 태그 표현 
--%>
	
<%if(hour < 12) {
	%><h3>오전입니다.</h3><%
} else {
	%><h3>오후입니다.</h3><%
}%>
	
<%if(hour < 12) { %>
	<h3>오전입니다.</h3>
<%} else { %>
	<h3>오후입니다.</h3>
<%} %>

0개의 댓글