Exemplo do Velocity da JM6

People,

Estou tentando executar o exemplo da matéria sobre o Velocity que saiu na JM6, mas estou tendo algumas dificuldades. Peguei os códigos no site da revista e tô fazendo o seguinte:

Estou usando:
Tomcat 4.1.24
Velocity 1.3
WinXP
velocity-dep-1.3.jar setado no CLASSPATH

As pastas e arquivos estão distribuídos assim:
webapps|ExemploVelocity|FormCadastro.vm
webapps|ExemploVelocity|velocity.properties
webapps|ExemploVelocity|WEB-INF|web.xml
webapps|ExemploVelocity|WEB-INF|classes|CadastroVelocity.class
webapps|ExemploVelocity|WEB-INF|lib|velocity-dep-1.3.jar

Bem, FormCadastro.vm e CadastroVelocity.class simplesmente copiei do fonte da revista.
Como velocity.properties não veio no fonte, peguei um da pasta de exemplos do Velocity, que está apenas assim:

runtime.log = velocity_example.log

O arquivo web.xml está como abaixo:

[code]<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<servlet>
<servlet-name>ExemploVelocity</servlet-name>
<servlet-class>CadastroVelocity</servlet-class>
<init-param>
<param-name>properties</param-name>
<param-value>/WEB-INF/velocity.properties</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ExemploVelocity</servlet-name>
<url-pattern>*.teste</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout> <!-- 30 minutes -->
</session-config>
</web-app>
[/code]

Está retornando o seguinte erro, quando tento acessar http:||127.0.0.1:8080|ExemploVelocity|xxxx.teste :

[color=“red”]HTTP Status 503 - Servlet ExemploVelocity is currently unavailable
type Status report
message Servlet ExemploVelocity is currently unavailable
description The requested service (Servlet ExemploVelocity is currently unavailable) is not currently available.[/color]

O que estou esquecendo ou fazendo de errado? :roll:

[]'s

a servlet nao incializou por algum monitovo
tem alguma coisa no init da sua servlet?

Fala Paulo,

Não tem init. Estou usando o exemplo da revista, igualzinho, que extende a VelocityServlet e, pelo que entendi, chama o método init() do VelocityEngine automaticamente.
O erro que estava dando parou e aparentemente o servlet está iniciando, mas está retornando uma página em branco (<html><body></body></html>) e dando o seguinte erro no console do Tomcat:

org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource ‘FormCadastro.vm’

Já coloquei o FormCadastro.vm em todas as pastas da minha webapp e nada. Alterei o file.resource.loader.path tbm, sem sucesso. :frowning:

Uma coisa que achei estranha é que o velocity_example.log está sendo gerado na pasta home do eclipse, se inicio o tomcat através dele, usando o plugin da sysdeo. Iniciando o tomcat pelo seu startup.bat ele passa a ser gerado na home do tomcat. É assim mesmo?? Me parece que o ResourceManager do VelocityServlet está usando um caminho errôneo, mas não consegui corrigir isso.

[]'s

Umlauf, dê uma olhada no que o log do tomcat diz sobre a inicializacao do servlet. Provavelmente vc vai achar um stacktrace esclarecedor lá :slight_smile:

Consegui rodar, mas colocando o template na pasta home do Eclipse e inicializando o Tomcat a partir do Eclipse. Inicializando o Tomcat pelo startup.bat não rola, ele não encontra o template, apesar de já ter colocado em todas as pastas possíveis :slight_smile:

Deve ser alguma configuração do Velocity, pois, pelo que parece, ele adota o caminho da aplicação que startou o Tomcat e passa esse parâmetro para a classe ResourceLoader. Ou alguma configuração no server.xml ou web.xml da minha webapp :?

Esse é o problema de batismo do Velocity, todo mundo acho q já passou por ele. :smiley:

Dê uma fuçada no file.resource.loader.path, é só acertar ele e o resto funciona direitinho :slight_smile:

Valeu cv. Era o file.resource.loader.path mesmo; era só colocar o caminho completo. :smiley:

ficou assim:

file.resource.loader.path = c&#58;/Java/Tomcat/webapps/ExemploVelocity/WEB-INF/templates

umlauf
voce pode setar essa variavel relativa a onde vc ta rodando a webapp, assim vopce nao rpecisa ficar setando ela no .properties toda vez.

da uma olhada como o guj faz:

http://cvs.arca.ime.usp.br/mamute/src/br/usp/ime/arca/mamute/Mamute.java?rev=1.9&content-type=text/vnd.viewcvs-markup

da uma olhada no init()

Hummmm interessante :slight_smile:

Vou tentar aqui depois. Valeu. :smiley: