2010-09-26 88 views
3

试图关注this Java tutorial我应该如何初始化freemarker.template.Configuration类?

约63页介绍了如何创建表单(“New.jsp”)来提交新事件。

当我尝试访问该页面时,我得到了以下错误:

HTTP Status 500 - 

type Exception report 

message 

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

exception 

javax.servlet.ServletException: Filter execution threw an exception 
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129) 
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77) 
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
root cause 

java.lang.NoClassDefFoundError: Could not initialize class freemarker.template.Configuration 
    org.apache.struts2.views.freemarker.FreemarkerManager.createConfiguration(FreemarkerManager.java:294) 
    org.apache.struts2.views.freemarker.FreemarkerManager.init(FreemarkerManager.java:255) 
    org.apache.struts2.views.freemarker.FreemarkerManager.getConfiguration(FreemarkerManager.java:238) 
    org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:734) 
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:506) 
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) 
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129) 
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77) 
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs. 

Apache Tomcat/6.0.29 

,我发现这个日志文件在d:\教育\ java.metadata.plugins \ org.eclipse.wst.server.core \ tmp1 \ logs \ localhost_access_log.2010-09-26.txt

127.0.0.1 - - [26/Sep/2010:04:29:09 +0200] "GET/HTTP/1.1" 404 953 
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:29:11 +0200] "GET /Events/ HTTP/1.1" 304 - 
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:29:11 +0200] "GET /favicon.ico HTTP/1.1" 404 986 
127.0.0.1 - - [26/Sep/2010:04:56:53 +0200] "GET/HTTP/1.1" 404 953 
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:56:55 +0200] "GET /Events/events/Listing.action HTTP/1.1" 200 963 
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:56:55 +0200] "GET /Events/assets/styles.css HTTP/1.1" 304 - 
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:56:55 +0200] "GET /Events/assets/bg.jpg HTTP/1.1" 304 - 
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:56:55 +0200] "GET /Events/assets/alpha-b.png HTTP/1.1" 304 - 
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:56:55 +0200] "GET /Events/assets/alpha-w.png HTTP/1.1" 304 - 
0:0:0:0:0:0:0:1 - - [26/Sep/2010:04:56:55 +0200] "GET /favicon.ico HTTP/1.1" 404 986 
0:0:0:0:0:0:0:1 - - [26/Sep/2010:05:02:49 +0200] "GET /Events/ HTTP/1.1" 404 974 
0:0:0:0:0:0:0:1 - - [26/Sep/2010:05:02:49 +0200] "GET /favicon.ico HTTP/1.1" 404 986 

我找不到任何其他日志。

任何想法如何解决这个问题?

回答

5

NoClassDefFound意味着该类定义在编译时存在,但在运行时的定义要么找不到或不是同一版本

在你的情况下,我认为它可能是在类路径中找到多个freemarker.template.Configuration版本的问题。理想的情况是建议立即进行删除只在freemarker.jar但在你的服务器/ lib目录check if you've got one of these jars并删除任何重复

如果没有这些,确保freemarker.jar其他的没有其他版本比你的战争

更新的解决方案如发现在评论

更名复制freemarker.jar为.bak没有帮助,工作时的搬出路径/ classpath中

+0

我在我的类路径中的c:\ devtool \ java \ tools中有一个较早版本的freemarker,但是无论是更新还是删除都解决了这个问题。 – 2010-09-27 09:46:12

+0

@布莱恩凯斯勒:那里肯定还有一个。删除后你重新启动了服务器吗?不更新它,删除愚蠢。 – JoseK 2010-09-27 10:23:50

+0

重新启动服务器(总是这样做):没有帮助。目前搜索我的驱动器更多freemarker * .jar文件,但我不期望找到任何。那么,我确实在我的eclipse工作区中找到了一些副本,埋在\ .metadata \中。插件文件夹,但在开发期间通过eclipse创建的路径和路径甚至不在我的PATH或CLASSPATH中,我不认为这些应该是相关的。 – 2010-09-27 11:56:39

0

的Javadoc java.lang.NoClassDefError说:

Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.

The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.

也就是说,支柱试图授权视图渲染FreeMarker的,但freemarker的是不在类路径中。试着找出你的struts版本需要哪个版本的freemarker,并将该版本的freemarker.jar添加到classpath中。

+0

我使用struts2-core-2.2.1和它在struts2-2.2.1-all.zip发行版中可用的struts2-blank-2.2.1.war文件中捆绑的freemarker-2.3.16 。 – 2010-09-26 21:39:24

0

看看您的日志并上传这些日志。他们应该是这样的一个文件夹中:

<<eclipse_workspace>>\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\logs 
+0

tmp0中没有日志。在tmp1和tmp2中有日志目录,但tmp2是空的。我已经在上面添加了tmp1日志。 – 2010-09-27 09:38:59

0

的只要把jar文件在WEB-INF/lib文件夹和多数民众赞成。 ..