"Velocity"의 두 판 사이의 차이
둘러보기로 가기
검색하러 가기
잔글 (‘Velocity’ 문서를 보호함 [edit=autoconfirmed:move=autoconfirmed]) |
(차이 없음)
|
2010년 7월 8일 (목) 18:24 기준 최신판
Java 기반의 Template Engine인 Apache Velocity를 정리 한다. Velocity는 MVC 모델에서 View영역에서 사용 되므로 JSP의 대안이 될 수 있다.
- 홈페이지 : http://velocity.apache.org/
- 다운로드 : http://velocity.apache.org/download.html
- 라이센스 : Apache Software License
- 플랫폼 : Java
목차
프로그램 문법
프로그램 기초
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) : 매크로 호출