我在servlet中调用java类时遇到此错误。
这是错误。
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 execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
java.lang.NoClassDefFoundError: com/hp/hpl/jena/query/QueryFactory
com.complexible.common.csv.MuseumData.gts(MuseumData.java:109)
com.complexible.common.csv.MuseumData.ass(MuseumData.java:89)
com.complexible.common.csv.MuseumRDF.doGet(MuseumRDF.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
java.lang.ClassNotFoundException: com.hp.hpl.jena.query.QueryFactory
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
com.complexible.common.csv.MuseumData.gts(MuseumData.java:109)
com.complexible.common.csv.MuseumData.ass(MuseumData.java:89)
com.complexible.common.csv.MuseumRDF.doGet(MuseumRDF.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.55 logs.
这是我的java类的代码,它将使用SPARQL从RDF文件获取记录,并将在控制台中以JSON格式返回输出,然后我将捕获输出并将其转换为字符串,因此我可以将该字符串用于servlet。
package com.complexible.common.csv;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.lang.NoClassDefFoundError;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFormatter;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
public class MuseumData {
public static void main( String[] args ) throws IOException {
String output=getrec();
System.out.println(output);
}
public static String getrec() throws IOException
{
String spr="prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"+
"prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"+
"prefix crm: <http://www.cidoc-crm.org/cidoc-crm/>\n"+
"prefix owl: <http://www.w3.org/2002/07/owl#>\n"+
"prefix xsd: <http://www.w3.org/2001/XMLSchema#>\n"+
"prefix crm: <http://www.cidoc-crm.org/rdfs/cidoc_crm_v5.0.4_official_release.rdfs#>\n"+
"\n"+
//?title ?person ?type instead of *
"SELECT * WHERE { <http://phdprototype.tk/collectionimage/4D0BFF17-5810-4644-A550-D35EE090D4A8.png>"+
"crm:P3_has_note ?title ; "+
"crm:E21_Person ?person ;"+
"crm:E62_String ?type ;"+
"crm:P82_at_some_time_within ?year;"+
"crm:P33_used_specific_technique ?material;}";
Query query = QueryFactory.create(spr);
Model model = ModelFactory.createDefaultModel();
File f = new File("J:/Museum/data.rdf");
model.read(new FileInputStream(f), "RDF/XML");
//model.write(System.out, "TTL");
final QueryExecution exec = QueryExecutionFactory.create(query, model);
//ResultSetFormatter.out(System.out, exec.execSelect(), query);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
// IMPORTANT: Save the old System.out!
PrintStream old = System.out;
// Tell Java to use your special stream
System.setOut(ps);
// Print some output: goes to your special stream
ResultSetFormatter.outputAsJSON(System.out, exec.execSelect());
// Put things back
System.out.flush();
System.setOut(old);
// Show what happened
// return baos.toString();
String gcr=baos.toString();
return gcr;
}
}
这是一个servlet代码,它将在浏览器中显示输出。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out= response.getWriter();
String rec=MuseumData.getrec();
out.print(rec);
}
答案 0 :(得分:4)
找到.jar for com / hp / hpl / jena / query / QueryFactory并将其放在.war文件中的WEB-INF lib中。
如果你碰巧在Eclipse IDE中开发servlet,那么如何做到这一点:
答案 1 :(得分:1)
您错过了类路径中包含类jar
的{{1}}文件。请将其添加到您的包/类路径
答案 2 :(得分:1)
在tomcat home lib和web-inf lib中添加了odbc6.jar后,问题已经解决了。
答案 3 :(得分:0)
HTTP状态500 - Servlet执行引发异常
因为我得到了相同的servlet异常错误..从tomcat 6升级到8。
在tomcat home lib和web-inf lib中添加了odbc6.jar后,问题已经解决了。