Velocity获取模板失败(空指针异常)的问题(在线等...)

sky2098 2008-04-21 10:10:56
初学Velocity。
不知为何,Velocity获取模板的时候发生空指针异常,模板已经放到Velocity上下文中了。
工程目录结构如下:
├─VelocityServlet
│ ├─log
│ │ velocity.log
│ │
│ ├─META-INF
│ │ MANIFEST.MF
│ │
│ ├─templates
│ │ lists.vm
│ │
│ └─WEB-INF
│ │ web.xml
│ │
│ ├─classes
│ │ │ hibernate.cfg.xml
│ │ │ velocity.properties
│ │ │
│ │ └─org
│ │ └─shirdrn
│ │ │ HibernateSessionFactory.class
│ │ │
│ │ └─velocity
│ │ ├─dao
│ │ │ PersonDao.class
│ │ │
│ │ ├─entity
│ │ │ Person.class
│ │ │ Person.hbm.xml
│ │ │
│ │ ├─service
│ │ │ PersonService.class
│ │ │
│ │ └─servlet
│ │ ListPersonsServlet.class
│ │
│ └─lib
│ antlr-2.7.5H3.jar
│ asm-attrs.jar
│ asm.jar
│ cglib-2.1.jar
│ commons-collections-2.1.1.jar
│ commons-logging-1.0.4.jar
│ dom4j-1.6.jar
│ ehcache-1.1.jar
│ hibernate3.jar
│ jaas.jar
│ jaxen-1.1-beta-4.jar
│ jdbc2_0-stdext.jar
│ jta.jar
│ log4j-1.2.9.jar
│ msbase.jar
│ mssqlserver.jar
│ msutil.jar
│ velocity-1.5.jar
│ xerces-2.6.2.jar
│ xml-apis.jar

我的Servlet代码如下:

package org.shirdrn.velocity.servlet;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.Properties;

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

import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.servlet.VelocityServlet;
import org.shirdrn.velocity.dao.PersonDao;
import org.shirdrn.velocity.service.PersonService;

public class ListPersonsServlet extends VelocityServlet {

protected Properties loadConfiguration(ServletConfig config)throws IOException, FileNotFoundException{
String propsFileName = config.getInitParameter(INIT_PROPS_KEY);
Properties props = new Properties();
if(propsFileName != null){
String realPath = getServletContext().getRealPath(propsFileName);
if(realPath != null){
propsFileName = realPath;
}
props.load(new FileInputStream(propsFileName));
}

String logFileName = props.getProperty(Velocity.RUNTIME_LOG);
if(logFileName != null){
String log = getServletContext().getRealPath(logFileName);
if(log != null){
props.setProperty(Velocity.RUNTIME_LOG,log);
}
}

String path = props.getProperty(Velocity.FILE_RESOURCE_LOADER_PATH);
if(path != null){
String realPath = getServletContext().getRealPath(path);
if(realPath != null){
props.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, realPath);
}
}
//System.out.println("props = "+props);
//props = {file.resource.loader.path=D:\Tomcat 5.5\webapps\VelocityServlet\templates, runtime.log=D:\Tomcat 5.5\webapps\VelocityServlet\log\velocity.log}
return props;
}

public Template handleRequest(HttpServletRequest request,HttpServletResponse response,Context ctx){
PersonDao personDao = new PersonService();
List personList = personDao.queryPersons("from Person");
ctx.put("personList", personList);
Template template = null;
try {
template = getTemplate("lists.vm","UTF-8");
} catch (ResourceNotFoundException e) {
e.printStackTrace();
} catch (ParseErrorException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return template;
}
}


就是在handleRequest方法中代码行template = getTemplate("lists.vm","UTF-8");处异常终止。
我的web.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>
<servlet-name>ListPersonsServlet</servlet-name>
<servlet-class>org.shirdrn.velocity.servlet.ListPersonsServlet</servlet-class>
<init-param>
<param-name>org.apache.velocity.properties</param-name>
<param-value>/WEB-INF/classes/velocity.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>ListPersonsServlet</servlet-name>
<url-pattern>/ListPersonsServlet</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

发生空指针异常的信息为:
java.lang.NullPointerException
at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:288)
at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1102)
at org.apache.velocity.runtime.RuntimeSingleton.getTemplate(RuntimeSingleton.java:324)
at org.apache.velocity.servlet.VelocityServlet.getTemplate(VelocityServlet.java:603)
at org.shirdrn.velocity.servlet.ListPersonsServlet.handleRequest(ListPersonsServlet.java:61)
at org.apache.velocity.servlet.VelocityServlet.doRequest(VelocityServlet.java:365)
at org.apache.velocity.servlet.VelocityServlet.doGet(VelocityServlet.java:318)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)


请问到底哪里出了问题?
谢谢。
...全文
503 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
lz要干嘛?
sky2098 2008-04-21
  • 打赏
  • 举报
回复
已经解决,是velocity-1.5.jar 包的问题,使用velocity-1.4.jar就OK了。

10,608

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧