我正在尝试编写一个servlet,它读取一个上传的pdf文件,然后从另一个servlet读取它。我想解析这个pdf文件并在解析文本中搜索关键字。
首先,我像一个普通的java代码一样做了应用程序,然后它运行得很好。但是,当我执行与servlet相同的代码时,它显示了一个意外的错误类定义,没有找到错误。
这里是错误:
SEVERE: Servlet.service() for servlet [ex.sat.com.PDFTestServlet] in context with path [/ContentBasedFileRetrival] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: org.apache.pdfbox.pdfparser.PDFParser
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at ex.sat.com.PDFTestServlet.pdftoText(PDFTestServlet.java:67)
at ex.sat.com.PDFTestServlet.doPost(PDFTestServlet.java:48)我将pdf框jar文件添加到了eclipse项目的库中。没有编译错误。
但是,当我作为java应用程序执行项目时,相同的代码运行良好。
这里是我的servlet:
package ex.sat.com;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
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 org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
@WebServlet("/PDFTestServlet")
public class PDFTestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String SAVE_DIR = "uploadFiles";
/**
* @see HttpServlet#HttpServlet()
*/
public PDFTestServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
ServletContext context = getServletContext();
PrintWriter writer = response.getWriter();
String appPath = request.getServletContext().getRealPath("");
String savePath = appPath + File.separator+"j2.pdf";
writer.println(savePath);
String pdf_text=pdftoText(savePath);
writer.println("SATYA");
writer.println(pdf_text);
}
static String pdftoText(String fileName) {
PDFParser parser;
String parsedText = null;;
PDFTextStripper pdfStripper = null;
PDDocument pdDoc = null;
COSDocument cosDoc = null;
File file = new File(fileName);
if (!file.isFile()) {
System.err.println("File " + fileName + " does not exist.");
return null;
}
try {
parser = new PDFParser(new FileInputStream(file));
} catch (IOException e) {
System.err.println("Unable to open PDF Parser. " + e.getMessage());
return null;
}
try {
parser.parse();
cosDoc = parser.getDocument();
pdfStripper = new PDFTextStripper();
pdDoc = new PDDocument(cosDoc);
pdfStripper.setStartPage(1);
pdfStripper.setEndPage(5);
parsedText = pdfStripper.getText(pdDoc);
} catch (Exception e) {
System.err
.println("An exception occured in parsing the PDF Document."
+ e.getMessage());
} finally {
try {
if (cosDoc != null)
cosDoc.close();
if (pdDoc != null)
pdDoc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return parsedText;
}}
发布于 2015-02-17 02:18:54
在我看来,servlet容器没有找到您的库,您可以尝试将jar文件放到容器的库目录中,然后重新启动它。(库不会与应用程序一起部署--通常是这样)。
发布于 2015-02-17 02:35:09
谢谢你们。刚才喜欢答案。问题解决了。--我正在通过添加外部jars、来完成构建路径。实际上,我必须把它作为一个库来添加。因此,在构建路径中,我创建了一个用户库,并将jar文件添加到用户库中,它的工作现在很好。
https://stackoverflow.com/questions/28553615
复制相似问题