普通に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/ におきます。
Hello.vm
これでサーブレットへアクセスすると、BODY部には次のような出力がされます。
Hello.vm