2012-09-04 3 views
0

저는 Apache Tomcat을 Velocity 및 VelocityViewServlet과 함께 사용하고 있습니다. ViewContext에 대한 커스텀 툴을 만들었습니다. 그것은 모두 잘 작동합니다.Apache Velocity + Tomcat : 웹 응용 프로그램 내에서 수동으로 템플릿 처리

질문 : 템플릿을 찾고로드하는 가장 좋은 방법은 무엇이며 매개 변수를 succied로 처리합니까?

나는 파일에 이미 절대 경로

((ViewContext)context).getRequest().getSession().getServletContext().getRealPath("/") 
  • 을 통해 얻은 나는 VelocityEngine를 인스턴스화해야합니까? 벨로 시티 (VelocityViewServlet)에 의해 유지 관리되는 글로벌이 없다고 가정합니다.
  • 어떤 Velocity 로더를 사용하는 것이 가장 좋습니까? 여기

답변

0

몇 가지 포인트 :

  • 는 VelocityViewServlet에 자체에게 VelocityEngine를 인스턴스화합니다. 글로벌이 아니라 ServletContext 당 하나의 엔진입니다.

  • VelocityViewSerlet은 기본 로더 (WebappLoader)를 사용하여 요청 URI에 해당하는 템플릿을 찾습니다. 따라서 자신도 할 필요가 없습니다.

  • 템플리트가 평가되는 속도 컨텍스트에는 이미 모든 표준 도구 (도구 2.0)가 채워져 있으며 그 중 HTTP 매개 변수를 검사 할 수있는 $ params가 있습니다.

  • ViewContext를 사용하는 대신 사용자 정의 도구를 이해할 수 없습니다. 사용자 정의 도구에 등록 정보 중 하나 인 listed here 사이에 필요한 모든 적절한 설정자를 추가해야합니다 (예 : 요청에 대한 액세스가 있으면 "public setRequest (HttpServletRequest request)"메서드를 선언합니다). 바둑판 식으로 볼 때 도구 구성 파일에서 선택한 키를 통해서만 도구에 접근 할 수 있어야하며 Velocity를 인식해서는 안됩니다.

  • 1.x보다 더 성숙한 라이브러리 인 VelocityTools 2.0을 사용하는 것이 좋습니다.

+0

응답을위한 Thx. 이미 2.0을 사용하고 있습니다. ViewContext에 대한 응답은 Velocity 가이드에 설명 된대로 init (Object) 메소드를 통해 수행된다. Atm 저는 Velocity.evaluate (vc, writer, "log", reader)로 목표 템플릿을 평가합니다; –

+0

Velocity.evaluate()를 직접 호출하면 VelocityViewServlet이 전혀 필요하지 않습니다. 그래서 여기에 누락 된 것이 있다고 생각합니다. 도구 자체의 경우, ViewContext를 사용하여 init() 메서드가 호출되지만 여기서는 필요할 경우 세터 만 선언하는 것이 더 좋습니다 (도구 프레임 워크에서 호출하는 방법). 또한 도구 내에서 템플릿을 찾으려면 어떨까요? 이 도구는 인스턴스화되고 컨텍스트 (사용자 또는 도구 프레임 워크 중 하나)에 의해 구현됩니다. 모두 –

+0

모두 Velocity 자체에서 처리됩니다. 실제로는 템플릿의 결과를 SQL로 실행하고 맵의리스트를 반환하는 하나의 툴을 제외하고는. 링크 (sql/myquery)는 다른 매개 변수 (varargs)와 함께 인수로 전달됩니다. 그 이상은 아니지만 필요합니다. 그래서 나는 "가장 순수한"해결책을 찾고 있습니다. 아니면 그냥 팁. 이것은 propably 히 내가 이것을 얻을 수있는 최대입니다 그래서 나는 이것을 답으로 표시 할 것입니다. –