当前位置: 首页 > 知识库问答 >
问题:

无法使Jasper报表与jsp/servlet一起使用

别子实
2023-03-14

几周来,我一直在努力让Jasper reports工作。它在Eclipse中工作得很好,Jasper网站的演示也很好。在JBoss中,我的jsp页面无法使用它。

我的jsp页面非常基本。它调用类中的方法。它肯定达到了这一点,因为我有输出诊断。当我调用任何Jasper方法时,都会出现以下错误:

java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.xml.JRXmlDigesterFactory

我已经到处转储jar文件。我甚至将这组jar转储到我的jre/lib/ext文件夹中。

  • 蜡染-1.5
  • commons-beanutils-1.8.0
  • commons-collections-3.2.1
  • commons-digester-1.7
  • commons-javaflow-20060411
  • commons-logging-1.1.1
  • iText-2.1.7
  • jasperreports-4.6.0
  • jasperreports-applet-4.6.0
  • jasperreports-fonts-4.6.0
  • jasperreports-javaflow-4.6.0
  • log4j
  • 组织。日食jdt。core\u 3.7.1。v\U B76\U R37x
  • poi-3.6

但没什么不同。

感谢您的回复和建议。我求助于将jar转储到jre/lib/ext文件夹中,因为我曾在JBoss default/lib中尝试过jar,但它不起作用。然而,我现在已经删除了除了Jboss default/lib之外的所有引用,但它仍然不起作用。

当我第一次启动JBoss并运行jsp页面时,我得到了以下stacktrace:

2012-06-19 08:03:49,349 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/Kanban].[jsp]] Servlet.service() for servlet jsp threw exception
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.<clinit>(JRXmlDigesterFactory.java:179)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:207)
at my.test.TestClass.compileReport(TestClass.java:73)
at my.test.TestClass.show(TestClass.java:35)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:85)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:619)

这似乎表明错误是与org/apache/Commons/log/LogFactory,但我肯定有commons-logging-1.1.1.jar在JBoss默认/lib。

如果我第二次运行jsp页面,我会得到一个不同的错误:

2012-06-19 08:04:23,080 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/Kanban].[jsp]] Servlet.service() for servlet jsp threw exception
java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.xml.JRXmlDigesterFactory
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:207)
at my.test.TestClass.compileReport(TestClass.java:73)
at my.test.TestClass.show(TestClass.java:35)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:85)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:619)

我可以提供任何额外的信息来帮助别人诊断我的问题。有人知道我做错了什么吗?

共有2个答案

夏骏
2023-03-14

你把NoClassDefFoundError与NoClassDefFoundException混淆了。你的类路径已经很好了。请不要污染JRE库。你应该完全撤销它。只需将jar放在WEB-INF/lib中就足够了。不要忘记撤消在Eclipse项目的“构建路径”设置中所做的任何更改。

这个特定的NoClassDefFoundError基本上意味着所提到的类的一个静态变量或块在初始化期间引发了异常,这反过来导致类加载器无法加载该类。该异常的真正根本原因应该在stacktrace的更深处可见。由于您没有发布整个stacktrace,因此无法解释为什么它无法初始化以及如何解决它。

因此,请阅读stackTrace中最底部的根本原因,解释异常/消息并相应地修复它。

郭琨
2023-03-14

首先,不要到处乱扔jar文件。这样做会使问题以及将来可能遇到的任何类路径问题变得复杂。请注意,我并不是想居高临下,我在发帖前读到它时听起来是这样的。遇到这样的人,几个月或几年后又对其他事情进行故障排除,这让我很恼火,他们把一切都搞复杂了。

所以,第一步是找出jar文件是什么。旧金山。jasperreports。发动机xml。JRXmlDigesterFactory位于中。如果它与JasperReports 4.5相同,那么它将出现在您的JasperReports-4.6.0中。

第2步是找到放置jar文件的正确位置。根据我在这里找到的一些JBoss文档,它应该位于您的JBoss安装目录中,位于server/default/lib。该文件夹的描述是:

lib目录是不应热部署的静态Java库的默认位置。此目录中的所有JAR在启动时都加载到共享类路径中。

第3步是重启JBoss并确保其正常工作。

它现在应该在工作,或者如果您缺少其他需要的库,您可能会得到不同的错误。如果是这样,请再次重复步骤。

最后,第四步是花一点时间去清理所有你放在哪里的罐子。我知道本能就是把它放在一边,或者甚至在适当的地方扔更多的罐子,因为你不知道你是否需要它们。相信我,总有一天它会咬你的。最好从一开始就保持一切整洁有序。

 类似资料:
  • 我是Spring Framework的新手。试图制作一个基于Java的Spring MVC项目。这是我的主要应用程序类 当我运行项目时,我得到了错误 为什么Spring不能显示JSP文件?

  • 当我从SourceForge网站下载JasperReports项目时,我创建JavaFx项目,我需要使用JasperReports库创建发票设计。提取的文件夹不包含dist文件夹,该文件夹包含构建发票设计所需的jar文件。文件夹包含这个文件夹,这里有什么问题“我是JasperReports的新手”

  • 我有一个需求,以PDF和Excel格式生成报告。因为我也选择了碧玉。现在需要你的帮助来确定相同的最佳方法。 注意-我的查询本质上是动态的。在某些情况下,会提供名称;在某些情况下,它们会提供日期,而不是名称;在某些情况下,两者兼而有之。 下面给出了我所确定的方法。 null

  • 我正在尝试打开我使用JasperSoft studio 6.1.0版制作的Jasper Report,我需要使用iReport 3.7.6打开它,但我收到一个错误: 我试着编译我的。JRXML与旧的使用JasperSoft studio,但我不能。 有人知道我该怎么解决这个问题吗?

  • 问题内容: 我的程序应该等待按下向左或向右箭头键,然后更改一个值,以便下次更新PaintComponent时,屏幕看起来有所不同。但是,运行该程序时,屏幕没有变化。 以下是变量声明: 这是主要的KeyListener声明: 这是用于绘画的方法: 当我运行该程序时,该程序会打印外壳,但是当我按箭头键时,屏幕上没有任何变化。 问题答案: 您需要先将关键侦听器添加到组件,然后才能调用它: 您还需要使组件

  • 问题内容: click事件可以正常运行,但是onmouseover事件不起作用。 问题答案: 您需要大写一些字母。