It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center
                            
                        
                    
                
                7年前关闭。
            
        

我想使用servlet,.jasper文件以pdf格式创建报告,但是有一个例外:


  HTTP状态500-Servlet执行引发异常

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

type Exception report

message Servlet execution threw an exception

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

exception

  
  javax.servlet.ServletException:Servlet执行引发异常
  
  根本原因
  
  java.lang.NoClassDefFoundError:
  net / sf / jasperreports / engine / JasperRunManager
    一个.Patient.doGet(Patient.java:46)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
  
  note备注在Apache中可以找到根本原因的完整堆栈跟踪
  Tomcat / 7.0.34日志。
  
  


servlet代码是:

package one;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.util.HashMap;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;

/**
 * Servlet implementation class Patient
 */
@WebServlet("/Patient")
public class Patient extends HttpServlet implements Servlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Patient() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        Connection con=DBCon.getConnection();
        InputStream inS=getServletContext().getResourceAsStream("/report-src/ganeshaji.jashper");

        OutputStream outS=response.getOutputStream();
        response.setContentType("application/pdf");

        try {
            JasperRunManager.runReportToPdfStream(inS, outS, new HashMap<String, Object>(),con);
            outS.flush();
            con.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            response.setContentType("text/html");
            e.printStackTrace();
        }
        }

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

}


请提供解决方案

最佳答案

通过研究根本原因

java.lang.NoClassDefFoundError: net/sf/jasperreports/engine/JasperRunManager


好像您错过了jasper jar或版本错误,不支持JasperRunManager。

在类路径中包含适当的jar将解决您的问题。

请下载以下罐子:

itext-4.2.0.jar

itextpdf-5.3.4.jar

jasperreports-4.0.1.jar

jasperreports-fonts-4.0.0.jar


并编写如下代码:

try {
FileInputStream fis = new FileInputStream(YOURREPORTPATH.jasper");
BufferedInputStream bufferedInputStream = new BufferedInputStream(fis);
jasperReport = (JasperReport) JRLoader.loadObject(bufferedInputStream);
} catch (Exception e2) {
 e2.printStackTrace();
}


然后在填充参数和数据源之后,创建pdf,如下所示:

JasperExportManager.exportReportToPdfFile(jasperPrint, OUTPUTFILENAME+".pdf");


谢谢...

777先生

10-07 12:50