반응형
처음에 아마존이나 라쿠텐을 대표로 하는 Web 쇼핑 사이트에서는, 상품 구입을 접수했을 때, 구입자에게 자동으로 메일을 송신하는 것이 일반적입니다.이 자동 메일의 문면은 대부분의 경우 회원정보, 주문번호, 상품번호 등이 기재되어 있습니다.전체 텍스트 포맷이 정해져 있고, 일부 동적으로 변경을 해서 이메일을 보내고 싶은 경우가 많습니다.이 글에서는 ′Velocity′라고 하는 템플릿 엔진을 활용해서 그 문제를 해결할 수 있는 방법을 설명을 해드리겠습니다.대상독자 Java 프로그래밍을 한 적이 있는 분을 대상으로 합니다.필요한 환경 샘플은 이하의 환경에서 동작 확인을 실시하고 있습니다.J2SE1 . 4 , J2SE5 . 0
Velocity 1 . 4
JavaMail 1 . 3 . 2
Java Activation Framework 1.0.2 Velocity라고 하는 Velocity는 Apache Jakarta 프로젝트의 서브 프로젝트 중 하나로, Java 기반의 범용 템플릿 엔진입니다.Velocity는 범용 템플릿 엔진이므로 웹 어플리케이션 웹 페이지 생성, 소스 코드 및 설정 파일 자동 생성 등 다양한 용도로 사용이 가능합니다.웹 어플리케이션의 웹 페이지 생성에 관해서는 Velocity Tools에서 Velocity Struts라고 하는 기능으로 Struts와 연계가 지원이 되고 있습니다.Velocity Tools는 Velocity의 서브 프로젝트로 Velocity의 기능을 확장하기 위한 다양한 툴을 제공하고 있습니다.소스 코드, 설정 파일 자동 생성에서 Velocity를 활용하는 예로는 AndroMDA를 들 수 있습니다.AndroMDA는 MDA(Model Driven Architecture)를 지원하는 오픈 소스 툴로 변환 엔진으로 Velocity를 채택하고 있습니다.샘플개요Velocity를사용해서메일의문면을템플릿에서변환하고,메일을보낼어플리케이션을소개합니다.덧붙여 당기사에서는 메일 문면을 동적으로 작성하는 부분에 초점을 맞추기 위해서, Web 애플리케이션이 아니고, Java 애플리케이션으로서 main 메서드로부터 기동하는 형식을 채용하고 있습니다.당 기사의 애플리케이션은 이하의 문면의 메일을 송신합니다.사토오하루오 님
슈퍼 EC 사이트 .com을 이용해 주셔서 감사합니다.
아래와 같은 주문을 받았습니다.
주문번호 : 0001-AAAA
≪구입상품 정보≫
-----------------------------
상품번호 | 주문상품명 | 가격
-----------------------------
0000-1111 | 건강식품아 | 1000
0000-1112 | 건강식품의 | 2000
-----------------------------
합계 3000
획득 포인트는 30입니다.
=================================================
슈퍼 EC 사이트.com
이메일 주소 : uper-ec-site.com
================================================= 그럼, 순서대로 메일 템플릿 파일, 소스 코드를 살펴보도록 하겠습니다.메일 템플릿 파일 샘플 개요에서 나타낸 메일 문면의 템플릿입니다.메일 문면 중 동적으로 작성되는 부분의 출력 제어를 VTL(Velocity Template Language)이라고 하는 Velocity만의 언어로 기술하고 있습니다.VTL은 일반 프로그래밍 언어와 문법적으로 큰 차이가 없기 때문에 Velocity를 처음 접하는 프로그래머들에게도 친숙하다고 할 수 있습니다.VTL의 상세한 설명에 대해서는, Velocity 유저 가이드와 VTL 레퍼런스 가이드를 참조해 주세요.「 ECMail . vm 」
$ order . member . lastName $ order . member . firstName 様
$company.name을 이용해 주셔서 감사합니다.
아래와 같은 주문을 받았습니다.
주문번호: $order.order Number
≪구입상품 정보≫
-----------------------------
상품번호 | 주문상품명 | 가격
-----------------------------
# set ( $ amount = 0 )
# foreach ( $ item in $ order . itemList )
$ item . itemCode | $ item.name | $ item . price
# set ( $ amount = $ amount + $ item . price )
# end
-----------------------------
총 $amount
# set ( $ point = 0 )
# if ( $ amount < 1000 )
# set ( $ point = 10 )
# elseif ( $ amount < 2000 )
# set ( $ point = 20 )
# else
# set ( $ point = 30 )
# end
획득포인트는 $point입니다.
=================================================
$ company.name
이메일 주소 : $company.email
================================================= VTL의 문법 여기에서, 상기의 메일 템플릿에서 사용하고 있는 VTL의 문법을 간단히 설명합니다.서식의 기술에 대해서는 알기 쉬움을 우선하기 위해, BNF 기법으로 기술하지 않고 평이한 기술로 하고 있습니다.VTL 에서는, 변수명의 선두에 「$」, 디렉티브(명령 지시자)의 선두에 「#」를 부여합니다.$객체 저장 이름. 속성 이름 [. 속성 이름 (... 반복)]Velocity에서는 Java객체를 Velocity 템플릿 파일 상에서 볼 수 있습니다. ′$객체 저장명′은 Velocity Context 클래스에 객체를 연결할 때 지정하는 이름입니다.그러면 템플릿 파일 상에서 오브젝트를 조회할 수 있습니다.속성의 첫 글자는 소문자로 그 이후에는 대소문자가 속성 이름과 일치해야 합니다.$order.member.lastName ′order′ 라는 이름으로 VelocityContext 클래스에 저장된 객체의 member 속성의 lastName 속성에 접근한다.아래 표에 VTL로 사용할 수 있는 디렉티브(Velocity에 대한 명령지시자)를 정리합니다.자바 클래스 구성 다음으로 샘플 어플리케이션을 구성하는 주요 클래스를 보겠습니다.애플리케이션을 동작시키기 위한 클래스군을 그림에 나타내고 있습니다.여기 클래스 그림에 있는 클래스는 Velocity의 사용, Mail 송신 처리등을 실시합니다.이번 어플리케이션에서는 이 클래스군이 설명의 메인이 됩니다.데이터를 저장하기 위한 클래스 군입니다.이러한 클래스의 인스턴스에 저장된 데이터가 메일 문면으로 전송됩니다.그림에 나타난 클래스의 개요는 아래 표와 같습니다.VelocityWrapper 클래스 Velocity API를 은폐하고 통일적으로 사용할 수 있도록 하기 위한 클래스입니다(래퍼 클래스).이와 같이 Wrapper 클래스 하나를 작성함으로써 Velocity를 사용하는데 있어서 기술해야 하는 정해진 코딩을 하나의 클래스로 묶을 수 있어서 어플리케이션 전체에서의 편리성이 향상됩니다.「 VelocityWrapper . java 」 抜粋 1
import org . apache . velocity . Template ;
import org . apache . velocity . VelocityContext ;
import org . apache . velocity . app . VelocityEngine ;
// (중략)
public class VelocityWrapper {
/** 템플릿 파일의 내용을 담은 클래스 */
private Template template = null ;
/** 템플릿 변환시 사용하는
오브젝트를 저장하기 위한 클래스 */
private VelocityContext context = new VelocityContext ( ) ;
/** Velocity 엔진에 접근하기 위한 클래스 */
private Velocity Engine engine = new Velocity Engine(); Vecocity Wrapper 클래스에서는 Velocity가 준비하는 클래스의 Template, Velocity Context, Velocity Engine의 세 클래스를 인스턴스 변수로 보유하고 있습니다.′Velocity Wrapper.java′ 발췌 2 (컨스트럭터)
/** 컨스트럭터 */
public Wrapper ( String templateFileName )
throws IOException , Exception {
// velocity.properties를 통한 Velocity Engine 초기화
Properties props = new Properties ( ) ;
props . load ( new FileInputStream ( ′ conf ′
+ File . separator + ′ velocity . properties ′ ) ) ;
engine . init ( props ) ;
// 템플릿 가져오기
template = engine . getTemplate ( templateFileName ) ;
}Velocity Wrapper 클래스의 컨트롤터입니다.주로 2가지 처리를 하고 있습니다.속성을 파일에서 로드하고 Velocity 엔진 기본 속성 설정 덮어쓰기
VelocityEngine 클래스의 getTemplate 메서드를 통해, Template 클래스의 인스턴스를 취득 「VelocityWrapper.java」 발췌 3
public void put ( String key , Object value ) {
context . put ( key , value ) ;
}}VelocityContext 클래스의 put 메서드를 단순히 호출하는 Wrapper 메서드 입니다.put 메서드로 Velocity Context 클래스의 인스턴스에 키와 값(오브젝트) 세트를 저장할 수 있습니다.템플릿 변환 처리 시 이 Velocity 컨텍스트에 저장한 키의 문자열로 템플릿 파일에서 객체를 참조할 수 있습니다.변환의 흐름은 다음과 같습니다.(템플릿 파일)
$company.name을 이용해 주셔서 감사합니다.
(자바 소스)
Company comp = new Company ( ) ;
comp.setName(′슈퍼EC 사이트.com′);
context . put ( ′ company ′ , com ) ; // context は VelocityContext
↓
(변환 후 문자열)
슈퍼 EC 사이트 .com을 이용해 주셔서 감사합니다.「 VelocityWrapper . java 」 발췌 4
public String merge ( )
throws ResourceNotFoundException , ParseErrorException ,
MethodInvocationException , Exception {
StringWriter sw = new StringWriter ( ) ;
template . merge ( context , sw );
return sw . toString ( ) ;
}}템플릿 변환을 수행하는 메서드입니다.템플릿과 오브젝트 값을 Marge함으로써 템플릿 변환 결과 문자열을 생성하고 있습니다.Mail Send App 클래스 다음으로 Velocity Wrapper 클래스를 사용하여 메일을 보낼 수 있는 Mail Send App 클래스를 보겠습니다.「 MailSendApp . java 」 발췌 1
public class MailSendApp {
public void send ( Order order , Company company ) throws Exception {
// 메일 전송용 속성 로드
Properties mailProps = new Properties ( ) ;
mailProps . load ( new FileInputStream ( ′ conf ′
+ File . separator + ′ ecSiteMail . properties ′ ) );
(중략)
Session session = Session . getDefaultInstance ( props , null ) ;
MimeMessage mimeMessage = new MimeMessage ( session ) ;
(중략)
// 메일 본문 지정
VelocityAdaptor va = new VelocityAdaptor ( ′ ECMail . vm ′ );
va . put ( ′ order ′ , order );
va . put ( ′ company ′ , company ) ;
String body = va . merge ( ) ;
mimeMessage
. setText ( body , mailProps . getProperty ( ′ mail . charset ′ ));
(중략)
// 메일발송
Transport . send ( mimeMessage ) ;
}Velocity Wrapper 클래스를 사용하여 글을 작성하고 Java Mail API로 메일을 전송하고 있습니다.send 메서드의 인수 Order 클래스와 Company 클래스의 인스턴스에는 메일 문면에 사용되는 값이 저장되어 있습니다.「 MailSendApp . java 」 발췌 2
/**
* @ param args
* [0]---메일 송신지 주소를 지정합니다(To).
[1] --메일 송신원주소를 지정합니다(From).
*/
public static void main ( String [ ] args ) throws Exception {
// 구매자 정보
Member member = new Member ( ) ;
member . setLastName ( ′ 佐藤 ′ );
member . setFirstName ( ′ 治夫 ′ );
member . setEmail ( args [ 0 ] );
// 구매상품 정보
Item item 1 = new Item ( ) ;
item 1 . setItemCode ( ′ 0000 - 1111 ′ );
item1.set Name ( ′건강식품회′ );
item 1 . setPrice ( 1000 ) ;
Item item 2 = new Item ( ) ;
item 2 . setItemCode ( ′ 0000 - 1112 ′ );
item2. set Name ( ′건강식품위′) );
item 2 . setPrice ( 2000 ) ;
// 주문정보
Order order = new Order ( ) ;
order . setMember ( member ) ;
order . setOrderNumber ( ′ 0001 - AAAA ′ ) ;
order . addItem ( item 1 ) ;
order . addItem ( item 2 ) ;
// 회사정보
Company company = new Company ( ) ;
company.setName(′슈퍼EC 사이트.com′);
company . setEmail ( args [ 1 ] ) ;
MailSendApp mailSendApp = new MailSendApp ( ) ;
mailSendApp . send ( order , company ) ;
}}이번 어플리케이션의 부팅원이 되는 main 메서드 입니다.메일 문면에 표시할 내용을 객체에 저장하고 Mail Send App 클래스의 send 메서드를 호출하고 있습니다.이번 샘플 어플리케이션에서는 도메인 오브젝트(Member, Item, Order, Company)에 고정 문자열을 설정했는데, 실제 EC 사이트에서는 회원들이 구입한 상품명 등을 오브젝트에 저장하게 됩니다.Velocity의 초기화 속성 설정 Velocity 엔진의 init 메서드 호출 시에 속성을 인수로 넘겨줌으로써 디폴트 속성 설정을 덮어쓸 수 있습니다.지정하지 않은 속성에는 Velocity가 준비하는 기본값이 적용됩니다.이번 샘플에서는 입력 템플릿의 문자 코드와 템플릿 파일을 배치할 디렉토리의 경로(상대 경로)를 지정하고 있습니다.「 velocity . properties 」
# 템플릿 파일의 문자 코드
input . encoding = Windows - 31J
#리소스 패스. 여러 개 있는 경우는 CSV 형식으로 기술.
file.resource.loader.path = template 다른 설정 속성은 Velocity를 다운로드한 압축파일 내의 src/java/org/apache/velocity/runtime/defaults/velocity.properties로 일람할 수 있습니다.속성 각각의 자세한 설명은 ′Velocity Developer′s Guide의 Velocity Configuration Keys and Values′를 참조하십시오.샘플의 실행 그러면, 샘플을 실행해 봅시다.먼저 실행 전에 실행 환경에 맞게 두 개의 파일을 편집해야 합니다.기동 스크립트
「 exec . bat 」
set CLASSPATH = classes ; lib activation . jar ; lib mailapi . jar ;
lib smtp . jar ; lib velocity - 1 . 4 . jar ; lib velocity - dep - 1 . 4 . jar
java to . msn . wings . codezine . velocitysample . app . MailSendApp
송신지 메일 주소 송신원 메일 주소
·보낼 사람 이메일 주소⇒구매자 이메일 주소
· 송신지 메일 주소 ⇒ EC 사이트측의 메일 주소
메일 전송용 속성 파일
「 ecSiteMail . properties 」
mail . smtp . host = xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx⇒ 송신에 사용하는 SMTP 서버 주소 DOS 프롬프트를 열어, 샘플을 전개한 디렉토리로 이동하고 나서 「exec.bat」를 실행하면 메일이 송신됩니다.정리해 이 기사에서는 이하의 내용을 소개했습니다.Velocity 활용 예로서~메일 송신 어플리케이션
Velocity 템플릿 파일.VTL ( Velocity Template Language ) の 紹介
Velocity 래퍼 클래스VelocityEngine 、 VelocityContext 、 Template の 使用 方法
Velocity 속성 설정 방법 참고 자료 Apache Jakarta Project Velocity
Ja Jakarta Project Velocity 번역 서브 프로젝트
Velocity 1 . 4
JavaMail 1 . 3 . 2
Java Activation Framework 1.0.2 Velocity라고 하는 Velocity는 Apache Jakarta 프로젝트의 서브 프로젝트 중 하나로, Java 기반의 범용 템플릿 엔진입니다.Velocity는 범용 템플릿 엔진이므로 웹 어플리케이션 웹 페이지 생성, 소스 코드 및 설정 파일 자동 생성 등 다양한 용도로 사용이 가능합니다.웹 어플리케이션의 웹 페이지 생성에 관해서는 Velocity Tools에서 Velocity Struts라고 하는 기능으로 Struts와 연계가 지원이 되고 있습니다.Velocity Tools는 Velocity의 서브 프로젝트로 Velocity의 기능을 확장하기 위한 다양한 툴을 제공하고 있습니다.소스 코드, 설정 파일 자동 생성에서 Velocity를 활용하는 예로는 AndroMDA를 들 수 있습니다.AndroMDA는 MDA(Model Driven Architecture)를 지원하는 오픈 소스 툴로 변환 엔진으로 Velocity를 채택하고 있습니다.샘플개요Velocity를사용해서메일의문면을템플릿에서변환하고,메일을보낼어플리케이션을소개합니다.덧붙여 당기사에서는 메일 문면을 동적으로 작성하는 부분에 초점을 맞추기 위해서, Web 애플리케이션이 아니고, Java 애플리케이션으로서 main 메서드로부터 기동하는 형식을 채용하고 있습니다.당 기사의 애플리케이션은 이하의 문면의 메일을 송신합니다.사토오하루오 님
슈퍼 EC 사이트 .com을 이용해 주셔서 감사합니다.
아래와 같은 주문을 받았습니다.
주문번호 : 0001-AAAA
≪구입상품 정보≫
-----------------------------
상품번호 | 주문상품명 | 가격
-----------------------------
0000-1111 | 건강식품아 | 1000
0000-1112 | 건강식품의 | 2000
-----------------------------
합계 3000
획득 포인트는 30입니다.
=================================================
슈퍼 EC 사이트.com
이메일 주소 : uper-ec-site.com
================================================= 그럼, 순서대로 메일 템플릿 파일, 소스 코드를 살펴보도록 하겠습니다.메일 템플릿 파일 샘플 개요에서 나타낸 메일 문면의 템플릿입니다.메일 문면 중 동적으로 작성되는 부분의 출력 제어를 VTL(Velocity Template Language)이라고 하는 Velocity만의 언어로 기술하고 있습니다.VTL은 일반 프로그래밍 언어와 문법적으로 큰 차이가 없기 때문에 Velocity를 처음 접하는 프로그래머들에게도 친숙하다고 할 수 있습니다.VTL의 상세한 설명에 대해서는, Velocity 유저 가이드와 VTL 레퍼런스 가이드를 참조해 주세요.「 ECMail . vm 」
$ order . member . lastName $ order . member . firstName 様
$company.name을 이용해 주셔서 감사합니다.
아래와 같은 주문을 받았습니다.
주문번호: $order.order Number
≪구입상품 정보≫
-----------------------------
상품번호 | 주문상품명 | 가격
-----------------------------
# set ( $ amount = 0 )
# foreach ( $ item in $ order . itemList )
$ item . itemCode | $ item.name | $ item . price
# set ( $ amount = $ amount + $ item . price )
# end
-----------------------------
총 $amount
# set ( $ point = 0 )
# if ( $ amount < 1000 )
# set ( $ point = 10 )
# elseif ( $ amount < 2000 )
# set ( $ point = 20 )
# else
# set ( $ point = 30 )
# end
획득포인트는 $point입니다.
=================================================
$ company.name
이메일 주소 : $company.email
================================================= VTL의 문법 여기에서, 상기의 메일 템플릿에서 사용하고 있는 VTL의 문법을 간단히 설명합니다.서식의 기술에 대해서는 알기 쉬움을 우선하기 위해, BNF 기법으로 기술하지 않고 평이한 기술로 하고 있습니다.VTL 에서는, 변수명의 선두에 「$」, 디렉티브(명령 지시자)의 선두에 「#」를 부여합니다.$객체 저장 이름. 속성 이름 [. 속성 이름 (... 반복)]Velocity에서는 Java객체를 Velocity 템플릿 파일 상에서 볼 수 있습니다. ′$객체 저장명′은 Velocity Context 클래스에 객체를 연결할 때 지정하는 이름입니다.그러면 템플릿 파일 상에서 오브젝트를 조회할 수 있습니다.속성의 첫 글자는 소문자로 그 이후에는 대소문자가 속성 이름과 일치해야 합니다.$order.member.lastName ′order′ 라는 이름으로 VelocityContext 클래스에 저장된 객체의 member 속성의 lastName 속성에 접근한다.아래 표에 VTL로 사용할 수 있는 디렉티브(Velocity에 대한 명령지시자)를 정리합니다.자바 클래스 구성 다음으로 샘플 어플리케이션을 구성하는 주요 클래스를 보겠습니다.애플리케이션을 동작시키기 위한 클래스군을 그림에 나타내고 있습니다.여기 클래스 그림에 있는 클래스는 Velocity의 사용, Mail 송신 처리등을 실시합니다.이번 어플리케이션에서는 이 클래스군이 설명의 메인이 됩니다.데이터를 저장하기 위한 클래스 군입니다.이러한 클래스의 인스턴스에 저장된 데이터가 메일 문면으로 전송됩니다.그림에 나타난 클래스의 개요는 아래 표와 같습니다.VelocityWrapper 클래스 Velocity API를 은폐하고 통일적으로 사용할 수 있도록 하기 위한 클래스입니다(래퍼 클래스).이와 같이 Wrapper 클래스 하나를 작성함으로써 Velocity를 사용하는데 있어서 기술해야 하는 정해진 코딩을 하나의 클래스로 묶을 수 있어서 어플리케이션 전체에서의 편리성이 향상됩니다.「 VelocityWrapper . java 」 抜粋 1
import org . apache . velocity . Template ;
import org . apache . velocity . VelocityContext ;
import org . apache . velocity . app . VelocityEngine ;
// (중략)
public class VelocityWrapper {
/** 템플릿 파일의 내용을 담은 클래스 */
private Template template = null ;
/** 템플릿 변환시 사용하는
오브젝트를 저장하기 위한 클래스 */
private VelocityContext context = new VelocityContext ( ) ;
/** Velocity 엔진에 접근하기 위한 클래스 */
private Velocity Engine engine = new Velocity Engine(); Vecocity Wrapper 클래스에서는 Velocity가 준비하는 클래스의 Template, Velocity Context, Velocity Engine의 세 클래스를 인스턴스 변수로 보유하고 있습니다.′Velocity Wrapper.java′ 발췌 2 (컨스트럭터)
/** 컨스트럭터 */
public Wrapper ( String templateFileName )
throws IOException , Exception {
// velocity.properties를 통한 Velocity Engine 초기화
Properties props = new Properties ( ) ;
props . load ( new FileInputStream ( ′ conf ′
+ File . separator + ′ velocity . properties ′ ) ) ;
engine . init ( props ) ;
// 템플릿 가져오기
template = engine . getTemplate ( templateFileName ) ;
}Velocity Wrapper 클래스의 컨트롤터입니다.주로 2가지 처리를 하고 있습니다.속성을 파일에서 로드하고 Velocity 엔진 기본 속성 설정 덮어쓰기
VelocityEngine 클래스의 getTemplate 메서드를 통해, Template 클래스의 인스턴스를 취득 「VelocityWrapper.java」 발췌 3
public void put ( String key , Object value ) {
context . put ( key , value ) ;
}}VelocityContext 클래스의 put 메서드를 단순히 호출하는 Wrapper 메서드 입니다.put 메서드로 Velocity Context 클래스의 인스턴스에 키와 값(오브젝트) 세트를 저장할 수 있습니다.템플릿 변환 처리 시 이 Velocity 컨텍스트에 저장한 키의 문자열로 템플릿 파일에서 객체를 참조할 수 있습니다.변환의 흐름은 다음과 같습니다.(템플릿 파일)
$company.name을 이용해 주셔서 감사합니다.
(자바 소스)
Company comp = new Company ( ) ;
comp.setName(′슈퍼EC 사이트.com′);
context . put ( ′ company ′ , com ) ; // context は VelocityContext
↓
(변환 후 문자열)
슈퍼 EC 사이트 .com을 이용해 주셔서 감사합니다.「 VelocityWrapper . java 」 발췌 4
public String merge ( )
throws ResourceNotFoundException , ParseErrorException ,
MethodInvocationException , Exception {
StringWriter sw = new StringWriter ( ) ;
template . merge ( context , sw );
return sw . toString ( ) ;
}}템플릿 변환을 수행하는 메서드입니다.템플릿과 오브젝트 값을 Marge함으로써 템플릿 변환 결과 문자열을 생성하고 있습니다.Mail Send App 클래스 다음으로 Velocity Wrapper 클래스를 사용하여 메일을 보낼 수 있는 Mail Send App 클래스를 보겠습니다.「 MailSendApp . java 」 발췌 1
public class MailSendApp {
public void send ( Order order , Company company ) throws Exception {
// 메일 전송용 속성 로드
Properties mailProps = new Properties ( ) ;
mailProps . load ( new FileInputStream ( ′ conf ′
+ File . separator + ′ ecSiteMail . properties ′ ) );
(중략)
Session session = Session . getDefaultInstance ( props , null ) ;
MimeMessage mimeMessage = new MimeMessage ( session ) ;
(중략)
// 메일 본문 지정
VelocityAdaptor va = new VelocityAdaptor ( ′ ECMail . vm ′ );
va . put ( ′ order ′ , order );
va . put ( ′ company ′ , company ) ;
String body = va . merge ( ) ;
mimeMessage
. setText ( body , mailProps . getProperty ( ′ mail . charset ′ ));
(중략)
// 메일발송
Transport . send ( mimeMessage ) ;
}Velocity Wrapper 클래스를 사용하여 글을 작성하고 Java Mail API로 메일을 전송하고 있습니다.send 메서드의 인수 Order 클래스와 Company 클래스의 인스턴스에는 메일 문면에 사용되는 값이 저장되어 있습니다.「 MailSendApp . java 」 발췌 2
/**
* @ param args
* [0]---메일 송신지 주소를 지정합니다(To).
[1] --메일 송신원주소를 지정합니다(From).
*/
public static void main ( String [ ] args ) throws Exception {
// 구매자 정보
Member member = new Member ( ) ;
member . setLastName ( ′ 佐藤 ′ );
member . setFirstName ( ′ 治夫 ′ );
member . setEmail ( args [ 0 ] );
// 구매상품 정보
Item item 1 = new Item ( ) ;
item 1 . setItemCode ( ′ 0000 - 1111 ′ );
item1.set Name ( ′건강식품회′ );
item 1 . setPrice ( 1000 ) ;
Item item 2 = new Item ( ) ;
item 2 . setItemCode ( ′ 0000 - 1112 ′ );
item2. set Name ( ′건강식품위′) );
item 2 . setPrice ( 2000 ) ;
// 주문정보
Order order = new Order ( ) ;
order . setMember ( member ) ;
order . setOrderNumber ( ′ 0001 - AAAA ′ ) ;
order . addItem ( item 1 ) ;
order . addItem ( item 2 ) ;
// 회사정보
Company company = new Company ( ) ;
company.setName(′슈퍼EC 사이트.com′);
company . setEmail ( args [ 1 ] ) ;
MailSendApp mailSendApp = new MailSendApp ( ) ;
mailSendApp . send ( order , company ) ;
}}이번 어플리케이션의 부팅원이 되는 main 메서드 입니다.메일 문면에 표시할 내용을 객체에 저장하고 Mail Send App 클래스의 send 메서드를 호출하고 있습니다.이번 샘플 어플리케이션에서는 도메인 오브젝트(Member, Item, Order, Company)에 고정 문자열을 설정했는데, 실제 EC 사이트에서는 회원들이 구입한 상품명 등을 오브젝트에 저장하게 됩니다.Velocity의 초기화 속성 설정 Velocity 엔진의 init 메서드 호출 시에 속성을 인수로 넘겨줌으로써 디폴트 속성 설정을 덮어쓸 수 있습니다.지정하지 않은 속성에는 Velocity가 준비하는 기본값이 적용됩니다.이번 샘플에서는 입력 템플릿의 문자 코드와 템플릿 파일을 배치할 디렉토리의 경로(상대 경로)를 지정하고 있습니다.「 velocity . properties 」
# 템플릿 파일의 문자 코드
input . encoding = Windows - 31J
#리소스 패스. 여러 개 있는 경우는 CSV 형식으로 기술.
file.resource.loader.path = template 다른 설정 속성은 Velocity를 다운로드한 압축파일 내의 src/java/org/apache/velocity/runtime/defaults/velocity.properties로 일람할 수 있습니다.속성 각각의 자세한 설명은 ′Velocity Developer′s Guide의 Velocity Configuration Keys and Values′를 참조하십시오.샘플의 실행 그러면, 샘플을 실행해 봅시다.먼저 실행 전에 실행 환경에 맞게 두 개의 파일을 편집해야 합니다.기동 스크립트
「 exec . bat 」
set CLASSPATH = classes ; lib activation . jar ; lib mailapi . jar ;
lib smtp . jar ; lib velocity - 1 . 4 . jar ; lib velocity - dep - 1 . 4 . jar
java to . msn . wings . codezine . velocitysample . app . MailSendApp
송신지 메일 주소 송신원 메일 주소
·보낼 사람 이메일 주소⇒구매자 이메일 주소
· 송신지 메일 주소 ⇒ EC 사이트측의 메일 주소
메일 전송용 속성 파일
「 ecSiteMail . properties 」
mail . smtp . host = xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx⇒ 송신에 사용하는 SMTP 서버 주소 DOS 프롬프트를 열어, 샘플을 전개한 디렉토리로 이동하고 나서 「exec.bat」를 실행하면 메일이 송신됩니다.정리해 이 기사에서는 이하의 내용을 소개했습니다.Velocity 활용 예로서~메일 송신 어플리케이션
Velocity 템플릿 파일.VTL ( Velocity Template Language ) の 紹介
Velocity 래퍼 클래스VelocityEngine 、 VelocityContext 、 Template の 使用 方法
Velocity 속성 설정 방법 참고 자료 Apache Jakarta Project Velocity
Ja Jakarta Project Velocity 번역 서브 프로젝트
반응형