[Velocity 3]Servlet+Velocity 기반 웹 응용

4579 단어 velocity
Velocity View Servlet 이란 무엇 입 니까?
org.apache.velocity.tools.view.Velocity ViewServlet 를 사용 하면 Velocity 를 Servlet 기반 웹 응용 프로그램 에 통합 하여 Servlet+Velocity 방식 으로 웹 응용 을 실현 할 수 있 습 니 다.
 
Servlet+Velocity 의 일반적인 절차
1.servlet 을 사용자 정의 하여 Velocity ViewServlet 의 handle Request 방법 을 실현 합 니 다.Velocity ViewServlet 의 doGet 또는 doPost 방법 을 덮어 쓰 지 마 십시오.기본 구현 은 handle Request 방법 으로 요청 을 전송 하 는 것 입 니 다.handle Request 를 실현 할 때 vm 의 모드 이미지 템 플 릿 을 되 돌려 야 합 니 다.
2.웹.xml 에서 사용자 정의 Servet 을 설정 하 는 동시에 Velocity 프로필 velocity.properties 의 위 치 를 지정 해 야 합 니 다.
3.지정 한 디 렉 터 리 에서 velocity.properties 설정 파일 을 만 들 고 Velocity 설정 정 보 를 저장 합 니 다.예 를 들 어 vm 파일 의 로드 위치 등 입 니 다.
4.vm 파일 을 정의 합 니 다.필요 에 따라 첫 번 째 Servlet 의 handle Request 방법 에서 vm 에 필요 한 매개 변 수 를 Context 매개 변수 대상 으로 전송 합 니 다.
 
정의 Servlet
 
package com.tom.servlets;

import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.VelocityViewServlet;

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

public class TestVelocityViewServlet extends VelocityViewServlet {

    @Override
    protected Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context ctx) {
        ctx.put("key", "This is value for the key");
        ctx.put("favoriteFruit","All");
        ctx.put("elements", new String[]{"One", "Two", "Three"});
        return getTemplate("abc.vm");
    }
}
 
웹.xml 설정
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>Velocity</servlet-name>
        <servlet-class>com.tom.servlets.TestVelocityViewServlet</servlet-class>
        <!--  Velocity    velocity.properties   ,   web      -->
        <init-param>
            <param-name>org.apache.velocity.properties</param-name>
            <param-value>/WEB-INF/velocity.properties</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Velocity</servlet-name>
        <url-pattern>/servlets/velocity</url-pattern>
    </servlet-mapping>
</web-app>
 
Velocity 프로필 velocity.properties 설정
resource.loader=webapp
webapp.resource.loader.class=org.apache.velocity.tools.view.WebappResourceLoader
#relative to the web context, has the same parent directory with WEB-INF
#that is, vm and WEB-INF are sibling folders
webapp.resource.loader.path=/vm
 
위 에 vm 파일 의 로드 경 로 를 지정 하 였 습 니 다.Webapp ResourceLoader 이기 때문에 웹 응용 루트 에 비해 계산 하기 시 작 했 습 니 다.즉,vm 와 WEB-INF 동급 디 렉 터 리 입 니 다.
 
 
vm 파일 정의
<!--abc.vm-->
<html>
    <body>
        <p>$key</p>
        #foreach($elem in $elements)
            <li>$elem</li>
        #end
        <div>
            #include("def.vm")
        </div>
    </body>
</html>


 
<!--def.vm-->
What's your favorite fruit? $favoriteFruit

 
결 과 는 velocity 라 는 servlet 에 방문 하여 얻 은 결 과 는:
 
This is value for the key
  • One
  • Two
  • Three

  • What's your favorite fruit? $favoriteFruit
     
    총결산
    Servlet+Velocity 기반 웹 응용 디 렉 터 리 구조:
     
    |-web
         |- WEB-INF
               |- web.xml 
               |- velocity.properties
         |- vm
               |- abc.vm
               |- def.vm
     
    문제.
    위의 디 스 플레이 결과 에서 주목 해 야 할 것 은 favoriteFruit 가 교체 되 지 않 았 다 는 것 입 니 다.이 를 통 해 Context 가 정의 한 값 이 전달 되 지 않 았 음 을 알 수 있 습 니 다!그러면 어떻게 변수 전달 을 합 니까?
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

    좋은 웹페이지 즐겨찾기