2012-06-10 4 views
2

У меня есть простой отчет о яшме, который показывает некоторые данные из базы данных. Отчет о яшме хорошо работает на дизайнере. Проблема в том, что я пытаюсь запустить отчет из сервлета. Я пытаюсь экспортировать отчет в формате pdf при работе с сервлетом. я включил зависимости, например,Как запустить отчет о яшме в сервлете

- jasperreports-4.6.0.jar 
- itextpdf-5.1.1.jar 
- commons-logging-1.1.1.jar 
- commons-collections-3.2.1.jar 
- commons-beanutils-1.8.3.jar 
- commons-digester3-3.2.jar 
- cglib-2.2.jar 

Я разместил свой файл report1.jasper внутри /web/report1.jasper Вот мой сервлет файл:

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    Connection connection; 
    ServletOutputStream servletOutputStream =response.getOutputStream(); 

    InputStream reportStream =getServletConfig().getServletContext().getResourceAsStream("/report1.jasper"); 

    HashMap parameterMap = new HashMap(); 
    String stdID="510BCT2010"; 
    String semester="1"; 
    parameterMap.put("stdID", stdID); 
    parameterMap.put("semester", semester); 
    try 
    { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     connection = DriverManager.getConnection ("jdbc:odbc:ACEM","",""); 
     JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream, parameterMap, connection); 

     connection.close(); 
     response.setContentType("application/pdf"); 
     servletOutputStream.flush(); 
     servletOutputStream.close(); 
    } 
    catch (Exception e) 
    { 
     // display stack trace in the browser 
     StringWriter stringWriter = new StringWriter(); 
     PrintWriter printWriter = new PrintWriter(stringWriter); 
     e.printStackTrace(printWriter); 
     response.setContentType("text/plain"); 
     response.getOutputStream().print(stringWriter.toString()); 
    } 
} 

При запуске сервлета в первый раз , я получаю следующее сообщение об ошибке:

java.lang.NoClassDefFoundError: org/apache/commons/digester/Rule 
net.sf.jasperreports.components.ComponentsExtensionsRegistryFactory.<clinit>(ComponentsExtensionsRegistryFactory.java:100) 
java.lang.Class.forName0(Native Method) 
java.lang.Class.forName(Class.java:247) 
net.sf.jasperreports.engine.util.JRClassLoader.loadClassForRealName(JRClassLoader.java:157) 
net.sf.jasperreports.engine.util.JRClassLoader.loadClassForName(JRClassLoader.java:115) 
net.sf.jasperreports.engine.util.ClassUtils.instantiateClass(ClassUtils.java:53) 
net.sf.jasperreports.extensions.DefaultExtensionsRegistry.instantiateRegistry(DefaultExtensionsRegistry.java:237) 
net.sf.jasperreports.extensions.DefaultExtensionsRegistry.loadRegistries(DefaultExtensionsRegistry.java:214) 
net.sf.jasperreports.extensions.DefaultExtensionsRegistry.loadRegistries(DefaultExtensionsRegistry.java:162) 
net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getRegistries(DefaultExtensionsRegistry.java:133) 
net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getExtensions(DefaultExtensionsRegistry.java:105) 
net.sf.jasperreports.engine.util.JRStyledTextParser.<clinit>(JRStyledTextParser.java:83) 
net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:121) 
net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:88) 
net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:103) 
net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:61) 
net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:153) 
net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:55) 
net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446) 
net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:407) 
net.sf.jasperreports.engine.JasperRunManager.runToPdfStream(JasperRunManager.java:201) 
net.sf.jasperreports.engine.JasperRunManager.runReportToPdfStream(JasperRunManager.java:720) 
com.reports.reportGenerator.doGet(reportGenerator.java:54) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 

Когда я запустить сервлет после этого я получаю следующее сообщение об ошибке

java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser 
net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:121) 
net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:88) 
net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:103) 
net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:61) 
net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:153) 
net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:55) 
net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446) 
net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:407) 
net.sf.jasperreports.engine.JasperRunManager.runToPdfStream(JasperRunManager.java:201) 
net.sf.jasperreports.engine.JasperRunManager.runReportToPdfStream(JasperRunManager.java:720) 
com.reports.reportGenerator.doGet(reportGenerator.java:54) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 

В нем говорится, что java.lang.NoClassDefFoundError. Я пропустил некоторые зависимости? Мой отчет не имеет графиков, только извлекает данные из базы данных.

+0

Пожалуйста, посмотрите на [http://stackoverflow.com/questions/3628302/jasperreports-noclassdeffounderror-exception-on-net-sf-jasperreports-engine-util][1] [1 ]: http://stackoverflow.com/questions/3628302/jasperreports-noclassdeffounderror-exception-on-net-sf-jasperreports-engine-util –

ответ

1

Я понял проблему. Зависимости библиотек отчетов Jasper зависят от его версии. jasperreport 4.6 требует groovy. Также у меня была новая библиотека itext (5.1), но отчет jasper 4.6 по-прежнему использует iText-2.1.7.

1

Кажется, что в ваших зависимостях отсутствует счетчик apache commons, учитывая стек.

Смежные вопросы