상단

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](-2..7.md)
 
  • 레퍼런스 : 레퍼런스는 문자열을 저장 또는 반환 한다.

    • 개체 : $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](1..5.md))
 #foreach ($name in ["b", "c"]("a",))
     $velocityCounter : 반복 카운트, 1, 2, 3, ...
     $velocityHasNext
     #break
 #end
 

Template 확장 문법

  • 매크로

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

관리자 매뉴얼


참고 문헌


 
 

분류: 오픈소스 
기술_자료실 
Spring 
Java 
Template_Engine

최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :