Servlet + Velocity + Tomcat.... alguem me ajuda?

7 respostas
F
Bom galera seguinte.... estou criando um servlet que atraves do velocity ele cria um arquivo xml para guardar as informacoes. eu fiz ele como uma aplicacao normal e funcionou achou o arquivo .vm e tudo + soh que agora estou tentando fazer como servlet e quando executo a pagina ele da 1 erro pois nao consegue achar o arquivo .vm os codigos: pagina servlet
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

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;

/**
 * Servlet implementation class Lab13
 */
public class Lab13 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Lab13() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		VelocityEngine ve = new VelocityEngine();
		ve.init();
		Users user = new Users();
		user.setEmail("[email removido]");
		user.setName("André");
		user.setPassowrd("1234");
		user.setRegistration("1");
		VelocityContext context = new VelocityContext();
		ArrayList list = new ArrayList();
        Map map = new HashMap();
        map.put("email", user.getEmail());
        map.put("name", user.getName());
        map.put("password", user.getPassowrd());
        map.put("registration", user.getRegistration());
        list.add( map );
        context.put("Users", list);
		Template t = ve.getTemplate("lab13.xml.vm");
		StringWriter writer = new StringWriter();
		t.merge(context, writer);
		PrintWriter out = response.getWriter();
		out.println(writer.toString());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}
arquivo xml:
<?xml version="1.0"?>

<Usuarios>
#foreach( $user in $Users)
  <user>
        <email>$user.email</email>
        <name>$user.name</name>
	<password>$user.password</password>
	<registration>$user.registration</registration>
  </user>
#end
</Usuarios>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Laboratorio13</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>Lab13</display-name>
    <servlet-name>Lab13</servlet-name>
    <servlet-class>Lab13</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Lab13</servlet-name>
    <url-pattern>/Lab13</url-pattern>
  </servlet-mapping>
</web-app>

a estrutura está:

C:\Opt\TOMCAT\apache-tomcat-7.0.6\webapps\lab13

META-INF
WEB-INF
lab13.xml.vm
C:\Opt\TOMCAT\apache-tomcat-7.0.6\webapps\lab13\WEB-INF

Classes
LIB
web.xml
C:\Opt\TOMCAT\apache-tomcat-7.0.6\webapps\lab13\WEB-INF\classes

Lab13.class
Users.class
C:\Opt\TOMCAT\apache-tomcat-7.0.6\webapps\lab13\WEB-INF\lib
velocity-1.7-dep

O erro....
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'lab13.xml.vm'
	org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:474)
	org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:352)
	org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1533)
	org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1514)
	org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:373)
	Lab13.doGet(Lab13.java:53)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.6 logs.

7 Respostas

F

alguem pode me ajudar plz?

Andre_Fonseca

oi,

já tentou

Template t = ve.getTemplate("lab13/lab13.xml.vm");

abs

F

vou tentar obrigado pela dica

F

nao funciona de jeito nenhum =(

F
fiz o seguinte coloquei
ve.setProperty("file.resource.loader.path", "C:\\Opt\\ProjetosEclipse\\Laboratorio13\\WebContent\\WEB-INF\\templates");

na pagina e ai ele nao deu mais o erro de achar o arquivo

soh que quando executo a pagina ele da o seguinte erro
A página XML não pode ser exibida 
Não é possível exibir a entrada XML usando a folha de estilos XSL. Corrija o erro e clique no botão Atualizar ou tente novamente mais tarde. 


--------------------------------------------------------------------------------

Caractere inválido encontrado no texto. Erro ao processar o recurso 'http://localhost:8080/Laboratorio13/Lab13'. Linha 5, ...

alguem tem alguma solucao??

Andre_Fonseca

oi,

parece que o seu XML está com caracteres inválidos, você consegue abrir diretamente o xml no browser? tente procurar por caracteres estranhos como & ou <

abs

F

André consegui resolver este problema colocando

ve.setProperty(“file.resource.loader.path”, “C:/templates/”);

coloquei meus templates no c: e fiz este comando ai funcionou… obrigado pela ajuda

Criado 4 de fevereiro de 2011
Ultima resposta 7 de fev. de 2011
Respostas 7
Participantes 2