JSP/Servlet | JSP(Java Server Pages) | 메소드와 필드 정의

이제 여러 줄의 코드 처리를 Java로 작성해서 실행시킬 수 있게 되었다. 하지만 이건 뭔가 이상한 느낌든다. Java라는 언어는 이런 식으로 문장을 쭉 써서 그것을 실행하는 언어가 아니다. 일반적으로 클래스를 정의하고 그 안에 메소드나 필드를 정의하고 실행하는 언어이다.

이런 식으로 실행하는 문장을 쭉 쓰는 방식으로는 메소드를 정의하고 호출하는 수 없는가?라고 생각할 수도 있다. 하지만 그런 걱정은 필요 없다. 제대로 메소드를 정의하기 위한 전용 태그가 준비되어 있다.

그 태그는 <%! ~ %> 이것이다. 이것은 <%!%>사이에 메소드 정의와 변수 선언 등을 기술하면 코드에서 바로 사용할 수 있다. 메소드뿐만 아니라 변수도 선언할 수 있는데, 일종의 전역 변수로 사용할 수 있다. 즉, <%! ~ %> 내에서 선언된 변수는 다른 메소드 등 모든에서 사용할 수 있다. 클래스의 필드와 같은 역할을 한다고 생각하면 된다.

그럼 간단한 사용 예제를 만들어 보자. 이전의 예제을 더 수정하도록 하자.

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="java.util.Calendar" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%!
String formatPattern = "yyyy-MM-dd";
String result = "none.";

void setFormatPattern(String f) {
    formatPattern = f;
}
void printToday() {
    Calendar calendar = Calendar.getInstance();
    SimpleDateFormat format = new SimpleDateFormat(formatPattern);
    result = format.format(calendar.getTime());
}
%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Sample jsp</title>
    <style>
    h1 {font-size:16pt; background:#AAFFAA; padding:5px; }
    </style>
</head>
<body>
    <h1>Sample jsp page</h1>
     <p>이 페이지는 샘플입니다.</p>
    <% printToday(); %>
    <p><%=result %></p>
    <% setFormatPattern("yyyy년 MM월 dd일"); %>
    <% printToday(); %>
    <p><%=result %></p>
</body>
</html>

여기에서는 날짜 형식을 나타내는 텍스트가 저장되는 formatPattern 변수와 포맷 생성된 날짜 텍스트를 저장 result 변수로 선언하고 있다. 그리고 날짜 형식을 설정하는 setFormatPattern과 오늘 날짜를 포맷 변수 result에 대입하는 printToday의 두 가지 메소드를 제공하고 있다.

여기에는 텍스트를 2회 출력한다. 이 부분을 살펴 보면 이렇게 되어 있다.

<% printToday(); %>
<p><%=result %></p>
<% setFormatStr("yyyy년 MM월 dd일"); %>
<% printToday(); %>
<p><%=result  %></p>

setFormatPattern으로 포맷을 설정하고, printToday으로 포멧의 텍스트를 대입하고 <%=reslt %>로 출력하는 흐름으로 처리하고 있다. 각각의 메소드와 변수가 제대로 기능을 하고 있다는 것을 알 수 있다.

또한, 이 코드에서 또 하나의 중요한 것을 알 수 있다. 그것은 “JSP Java 코드는 여러 개의 태그로 나뉘어 작성되어도 모든 하나로 통합한 것으로 간주된다"는 점이다. 수행할 처리는 하나의 <% ~ %> 태그로 정리하여 작성 필요는 없다. 여러 태그에 나누어 있어도, 모든 하나로 연속되게 처리를 한다. 이는 매우 중요한 JSP 특성으로 꼭 기억해 두도록 하자.