JAVA velocity 템 플 릿 엔진 사용 실례

velocity 는 1.7 버 전 을 사용 합 니 다.win 7 에서 intelliJ IDEA 를 사용 하여 tomcat 기반 웹 app 프로젝트 를 만 들 고 todo 라 고 명명 합 니 다.웹,path 를/todo 로 설정 하고 velocity 관련 jar 패 키 지 를 가 져 옵 니 다.velocity-1.7.jar 만 가 져 오 면 오류 가 발생 할 수 있 습 니 다.알림 에 따라 velocity 가 가지 고 있 는 다른 가방 을 가 져 옵 니 다.프로젝트 구 조 는 다음 과 같다.
테스트 Tomcat
index.jsp 내용 은 다음 과 같 습 니 다.

<%-- Created by IntelliJ IDEA. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title></title>
  </head>
  <body>
           <%
               out.print("hi,todo");
           %>
  </body>
</html>
Hello World.java 내용 은 다음 과 같 습 니 다.

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;   
public class HelloWorld extends HttpServlet {
    /**
     *
     * @param request
     * @param response
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hi!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Hello World!!!</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}
웹 xml 에 다음 과 같은 내용 을 추가 합 니 다.

<servlet>
    <servlet-name>hi</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hi</servlet-name>
    <url-pattern>/hi</url-pattern>
</servlet-mapping>
프로젝트 를 실행 하고 있 습 니 다.http://localhost:8080/todo화해시키다http://localhost:8080/todo/hi효 과 를 볼 수 있다.
velocity 사용 하기
다음은 velocity 템 플 릿 엔진 을 사용 하여 src 에 디 렉 터 리 templates 를 만 들 고 templates 디 렉 터 리 에 파일 test.vm 을 만 듭 니 다.내용 은 다음 과 같 습 니 다.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
#set( $this = "Velocity")
$this is great!  <br/>
$name  <br/>
hi  , i am letian
<h1> </h1>
</body>
</html>
src 디 렉 터 리 에 자바 파일 을 새로 만 듭 니 다.MyVelocity 01.java:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.VelocityContext;
import java.util.Properties;
public class MyVelocity01 extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        Properties properties=new Properties();
        properties.setProperty("resource.loader", "class");
        properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        //properties.setProperty("input.encoding", "UTF-8");
        //properties.setProperty("output.encoding", "UTF-8");
        properties.setProperty(Velocity.ENCODING_DEFAULT, "UTF-8");
        properties.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
        properties.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8");
        VelocityEngine velocityEngine = new VelocityEngine(properties);
        VelocityContext context=new VelocityContext();
        context.put("name", "test");
        StringWriter sw = new StringWriter();
        velocityEngine.mergeTemplate("templates/test.vm", "utf-8", context, sw);
        //velocityEngine.mergeTemplate("templates/test.vm", "utf-8", context, sw);      //
        out.println(sw.toString());
    }
}
웹.xml:

<!--MyVelocity-->
<servlet>
    <servlet-name>ve</servlet-name>
    <servlet-class>MyVelocity01</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ve</servlet-name>
    <url-pattern>/ve</url-pattern>
</servlet-mapping>
재배 치 설정,브 라 우 저 접근http://localhost:8080/todo/ve에서 효 과 를 볼 수 있 습 니 다.
간단 한 소개 velocity
velocity 는 자바 기반 템 플 릿 엔진 으로 세 가지 파일 로 딩 템 플 릿 방식 이 있 습 니 다.1.파일 경로 로 2 를 불 러 오고 클래스 경로(MyVelocity 01.java 에서 이 방법 을 사용 합 니 다)3.jar 파일 로 딩 부터 velocity 에 접촉 할 때 템 플 릿 을 불 러 오 는 데 문제 가 생 길 수 있 습 니 다.
템 플 릿 파일 에 변 수 를 전달 하 는 방법:템 플 릿 자체 가 변 수 를 정의 할 수 있 습 니 다.예 를 들 어 test.vm 에서 변 수 를 정의 할 수 있 습 니 다.자바 코드 는 템 플 릿 에 변 수 를 전달 할 수 있 습 니 다.예 를 들 어 test.vm 의 변 수 는$name 이 바로 Velocity Context 인 스 턴 스 로 전 달 됩 니 다.또한 velocity 도 교체 대상 을 지원 합 니 다.예 를 들 어 저 희 는 MyVelocity 01.자바 에서 자바 util.Vector 를 가 져 와 코드:

context.put("name", "test");
를 다음 과 같이 바 꿉 니 다.

Vector v = new Vector(); 
v.addElement("Harry"); 
v.addElement("John"); 
String[] names = {"Harry", "John"};
context.put("names1", v);
context.put("names2", names);
test.vm 내용 을

<h1>hello</h1>
#foreach($name in $names1)
    $name   <br/>
#end
#foreach($name in $names2)
    $name   <br/>
#end
velocity 는 map 용기 도 지원 합 니 다.\#include(")를 사용 하여 정적 템 플 릿 을 도입 하고\#parse("템 플 릿 이름")를 동적 템 플 릿 에 도입 하 는 것 을 지원 합 니 다.
자바 MVC 로 사 이 트 를 쓰 려 면 servlet+velocity 를 사용 하 는 것 이 작고 유연 한 선택 입 니 다.

좋은 웹페이지 즐겨찾기