Velocity

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기

Java 기반의 Template Engine인 Apache Velocity를 정리 한다. Velocity는 MVC 모델에서 View영역에서 사용 되므로 JSP의 대안이 될 수 있다.


프로그램 문법

프로그램 기초

Velocity는 JSP에 해당하는 Velocity Template File (~.vm)을 사용 한다.

  • 선언 및 사용
import java.io.StringWriter;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.MethodInvocationException;

VelocityContext context = null;
Template template = null;

Velocity.init("velocity.properties");

context = new VelocityContext();
context.put(name, value);   ## 템플릿으로 전달할 값 저장

try {
    template = Velocity.getTemplate("TemplateName.vm");
    BufferedWriter fout = new BufferedWriter(new OutputStreamWriter(System.out)); 
    template.merge(context, fout);
    fout.flush();
    fout.close();
} catch( ResourceNotFoundException rnfe ) {
} catch( ParseErrorException pee ) {
} catch( MethodInvocationException mie ) {
} catch( Exception e ) {
}

상수/변수

함수

데이터 할당

context.put(name, value);

기타 확장 문법

Template 문법

VTL (Velocity Template Language)는 Velocity에서 템플릿 개발에 사용되는 간단한 언어 이다.

Template 기초

  • 주석
## : 한줄 주석
#* 여러줄 *# : 여러줄 주석
  • 중단
#stop : 중단
  • Template 무시
  • ' ' 안에서는 $var가 확장 되지 않는다.
#literal()
    ~
#end

Template 상수/변수

  • 내장 객체
  • $actionInstanceVariable : getVariable()로 접근
  • $req : HttpServletRequest
  • $res : HttpServletResponse
  • $stack : com.opensymphony.xwork.util.OgnlValueStack 인스턴스
  • $ognl : com.opensymphony.webwork.views.jsp.ui.OgnlTool 인스턴스
  • $webwork : com.opensymphony.webwork.util.WebWorkUtil 인스턴스
  • $action : WebWork action
  • $taglib : Velocity 매크로를 통한 JSP tag 라이브러리 접근
  • 변수 선언 및 값 지정
#set ($name = value) : 문자열 값 지정
단, value가 null일 경우 $name은 값의 변화가 없음
"value"를 사용할 경우, value 부분이 파싱되어 처리됨
'value'를 사용할 경우, value 부분은 파싱되지 않음 (stringliterals.interpolate=true)
  • 범위 연산 선언
[-2..7]
  • 레퍼런스 : 레퍼런스는 문자열을 저장 또는 반환 한다.
  • 개체 : $variable, ${variable}
  • 속성 : $variable.property, ${variable.property}
  • 속성 또는 getProperty()가 호출됨
  • 함수 : $variable.method(args), ${variable.method(args)}
  • 기타 문법
$!variable, $!{variable} : 값이 없을 경우 공백 표시
\\ : \, \$ : $, \# : #

Template 함수

Template 포함

  • 외부 Template 파일 포함
#include ("file1.txt", "file2.txt") : 그대로 포함
#parse ("file.vm") : 파싱하여 포함
  • 내부 Block 영역 포함
#define( $block )
    Hello $who
#end

$block

Template 분기 및 순환

  • #if (조건) #elseif (조건) #else #end : 조건문
참 : true, null이 아님
거짓 : false, null
<, >, ==, &&(and), ||(or), !(not)
== : 같은 object type이 아닐 경우 false 처리
  • #foreach ($name in $배열등) #end : 반복문
#foreach ($idx in [1..5])
#foreach ($name in ["a", "b", "c"])
    $velocityCounter : 반복 카운트, 1, 2, 3, ...
    $velocityHasNext
    #break
#end

Template 확장 문법

  • 매크로
#macro (macroName $arg1 $arg2) : 매크로 선언
//--- velocity.properties의 velocimacro.library에 지정된 라이브러리는 모든 템플릿에서 공유 된다.
#macroName(arg1 arg2) : 매크로 호출

관리자 매뉴얼

참고 문헌