Servlet and Velocity

普通にVelocityをServletの中で使うときは、WEB-INF/classes/ にテンプレートファイルをおけばいいらしい。

WEB-INF/classes/jp/Hello.class を、次のファイルから作成した場合、

package jp;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;

public class Hello extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.println("<html><head><title>test</title></head>");
        out.println("<body bgcolor="white">");
        StringWriter buf = new StringWriter();
        BufferedWriter writer = new BufferedWriter(buf);
        try {
            VelocityEngine ve = new VelocityEngine();
            ve.init();
            VelocityContext ctx = new VelocityContext();
            Template template = ve.getTemplate("hello.vm""UTF-8");
            ctx.put("name""Hello");
            template.merge(ctx, writer);
            writer.flush();
            out.println("Velocity:" + buf.toString());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            writer.close();
        }
        out.println("</body>");
        out.println("</html>");
    }
}

次のようなhello.vmを WEB-INF/classes/ におきます。

$name
Hello.vm

これでサーブレットへアクセスすると、BODY部には次のような出力がされます。

Velocity:Hello
Hello.vm
同じカテゴリの記事: Java