목차
개요
JSP 스크립트 요소는 JSP 페이지 내에 자바의 코드를 삽입하기 위해 사용되며 선언문(Declaration), 스크립틀릿(Scriptlet), 표현식(Expression)이 있다.
선언문
<%! ... %>
JSP 페이지에서 자바 코드의 멤버 변수와 메소드 선언하기 위해 사용된다. 선언된 변수는 JSP 파일이 컴파일될 때 멤버 변수로 인식되기 때문에 JSP 페이지의 어느 위치에서도 해당 변수를 참조하는 것이 가능하다.
declarationTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h1><%=getStr()%></h1>
<%!
private String getStr() {
str+=" 테스트입니다.";
return str;
}
private String str = "선언문";
%>
결과
멤버 변수이므로 어디서든 선언된다. 멤버 변수가 헷갈리면 여기 참고.
스크립틀릿
<% ... %>
JSP는 서블릿 코딩의 어려움을 극복하기 위해 개발된 방식이다. HTML 코드로 된 부분은 일반 HTML 파일처럼 사용하고 자바 코드로 이루어진 비즈니스 로직 부분은 스크립틀릿 태그를 사용하여 구분하여 쉽게 HTML 응답을 만들어 낼 수 있다.
+ 선언된 변수는 지역 변수로 인식되므로 변수를 선언하기 이전의 위치에서 참조가 불가능하다. (선언문의 멤버 변수와 반대!)
scriptletTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.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>Scriplet Test</title>
</head>
<body>
<h1>현재 시간은 <%=hour %>시 <%=min %>분 <%=sec %>초 입니다.</h1>
</body>
</html>
결과
실제로 아래 위치로 가면 servlet 파일로 변환된 것을 확인할 수 있다.
표현식
<%= 변수 %>
<%= 리턴 값이 있는 메소드%>
<%= 수식(변수 또는 리턴 값이 있는 메소드를 포함할 수 있음)%>
선언문 또는 스크립틀릿 태그에서 선언된 변수 값이나 메소드의 리턴 값을 스크립틀릿 태그 외부에서 출력하기 위해 사용되는 방법이다. 구문 전체의 결과 값이 JSP 파일이 파싱될 때 출력 객체의 print() 메소드를 통해 자동으로 문자열 형식으로 변환되어 출력된다.
+ 표현식 태그 내의 구문 전체가 하나의 print() 메소드의 괄호 안에 통째로 들어가게 되므로 표현식 태그 내부에서 ;를 사용하면 안 됨!
expressionTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%!
public int sum() {
int total = 0;
for (int i=1; i<=100; i++)
total+=i;
return total;
}
%>
<%
String str = "1부터 100까지의 합";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Expression Test</title>
</head>
<body>
<h2><%=str%>은 <b><%= sum() %></b>입니다.</h2><br>
<h2><%=str%>에 3을 곱하면 <b><%=sum()*3 %>이 됩니다.</b></h2> <br>
<h2><%=str%>을 1000으로 나누면 <b><%=sum()/1000%></b>이 됩니다.</h2>
</body>
</html>