【问题标题】:HTTP Status 500 - Servlet execution threw an exceptionHTTP 状态 500 - Servlet 执行引发异常
【发布时间】:2014-10-26 06:36:05
【问题描述】:

在 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);


}

【问题讨论】:

    标签: java web-services servlets jena semantic-web


    【解决方案1】:

    您在类路径中错过了包含类com.hp.hpl.jena.query.QueryFactoryjar 文件。请将其添加到您的包/类路径中

    【讨论】:

    • 我添加了 arq jar 但我的问题没有得到解决
    【解决方案2】:

    找到 com/hp/hpl/jena/query/QueryFactory 的 .jar 并将其放入 .war 文件的 WEB-INF 库中。

    如果您碰巧在 Eclipse IDE 中开发 servlet,请按以下步骤操作:

    【讨论】:

    • 我添加了 arq-2.8.7.jar 但我的问题没有得到解决。
    【解决方案3】:

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

    当我遇到同样的 servlet 异常错误时。从 tomcat 6 升级到 8 时。

    在 tomcat 主库和 web-inf 库中添加 odbc6.jar 后,问题已得到解决。

    【讨论】:

      【解决方案4】:

      在tomcat home lib和web-inf lib中添加odbc6.jar后问题已经解决。

      【讨论】:

        猜你喜欢
        • 2015-08-23
        • 2012-11-18
        • 2015-09-26
        • 1970-01-01
        • 2013-01-25
        • 2017-11-28
        • 2015-07-27
        • 2018-06-29
        • 1970-01-01
        相关资源
        最近更新 更多