代码之家  ›  专栏  ›  技术社区  ›  brice

java.lang.noclassdefounderror:com/hp/hpl/jena/shared/baduriException on running servlet

  •  0
  • brice  · 技术社区  · 15 年前

    当运行一个非常简单的servlet时,我得到一个“java.lang.noclassdefounderror:com/hp/hpl/jena/shared/baduriException”。错误指向“tagger”类的初始化。代码如下

    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import my.package.Tagger;
    
    public class NormaliserServlet extends HttpServlet{
        public void doGet(HttpServletRequest req, HttpServletResponse response) throws IOException{
            Tagger pot = new Tagger("");
    
            response.setContentType("text");
            PrintWriter out = response.getWriter();
            out.println("hello");
            out.println(pot.someMethod());
            out.close();
    
            this.log("Request for normaliser");
        }
    }
    

    war文件包含在WEB-INF/lib中定义“tagger”的JAR文件,类似的调用在servlet之外工作。我似乎找不到问题所在。web.xml也是相当标准的:

    <servlet>
        <servlet-name>normalise</servlet-name>
        <servlet-class>NormaliserServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>normalise</servlet-name>
        <url-pattern>/normalise</url-pattern>
    </servlet-mapping>
    

    我使用Winstone作为servlet容器,但在Tomcat中得到了完全相同的错误。stacktrace是:

    java.lang.NoClassDefFoundError: com/hp/hpl/jena/shared/BadURIException
        at NormaliserServlet.doGet(NormaliserServlet.java:13)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:104)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:45)
        at winstone.ServletConfiguration.execute(ServletConfiguration.java:249)
        at winstone.RequestDispatcher.forward(RequestDispatcher.java:335)
        at winstone.RequestHandlerThread.processRequest(RequestHandlerThread.java:244)
        at winstone.RequestHandlerThread.run(RequestHandlerThread.java:150)
        at java.lang.Thread.run(Thread.java:619)
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   Mat Mannion    15 年前

    看起来你好像找不到珍娜的罐子了(?)它定义了BaduriException类。那个JAR也包含在WEB-INF/lib目录中吗?你试过在Winstone中查看解包的war文件并检查相关jar是否都在那里吗?

        2
  •  2
  •   Thilo    15 年前

    您缺少的JAR文件来自 Jena project . 他们应该在你的战争档案里。

    它可能是您使用的其他库的间接依赖关系。看看stacktrace,看看Jena和您的代码之间还有什么。

        3
  •  0
  •   diciu    15 年前

    这个班 com/hp/hpl/jena/shared/baduriException(com/hp/hpl/jena/shared/baduriException) ,大概由 标签机 不在servlet容器的类路径中。

    如果它在servlet容器之外工作,那么很可能您的环境中有定义类路径的条目。 检查类路径并复制servlet容器的lib目录中缺少的lib。