Tomcat NoClassDefFoundError

Tomcat NoClassDefFoundError

编辑我的代码以使用 JNI 后,我的 JSP 得到了 NoClassDefFoundError。我似乎无法理解为什么当我的所有 .java and .class 都在 WEB-INF/classes/matrixcalculator 路径中时。 .h, .c and .so 位于 matrixcalculator 文件夹旁边的 WEB-INF/classes/ 中。这是代码错误日志:

java.lang.NoClassDefFoundError: Could not initialize class matrixcalculator.MatrixCalculator
org.apache.jsp.adminOnly_jsp._jspService(adminOnly_jsp.java:69)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:750)
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:720)
org.apache.jsp.requestPermission_jsp._jspService(requestPermission_jsp.java:87)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

它之前是有效的,但在添加本机函数、loadLibrary 和其他文件之后,我收到此错误。我尝试将文件更改为 WEB-INF/classes/matrixcalculator 中的相同文件夹,但仍然无法摆脱错误。我相信它与将路径导出到 MatrixCalculator.class 所在的位置有关,但我真的不明白在哪里以及为什么。除非我把他的文件放在 Tomcat 的公共文件夹中,但我可能是错的。另外,我直接调用 JSP,而不是使用 Tomcat 管理器

我添加了 language = "java",但 java bean 出现错误:

org.apache.jasper.JasperException: An exception occurred processing JSP page /adminOnly.jsp at line 8

5: --%> 6: 7: <%@page language = "java" contentType="text/html" pageEncoding="UTF-8"%> 8: 9: 10: 11:

这是静态块:

    static {
    System.loadLibrary("methodsViaC");
}

添加 try/catch 后出现新错误(异常 e):

java.lang.UnsatisfiedLinkError: no methodsViaC in java.library.path
java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
java.lang.Runtime.loadLibrary0(Runtime.java:849)
java.lang.System.loadLibrary(System.java:1088)
matrixcalculator.MatrixCalculator.<clinit>(MatrixCalculator.java:77)
org.apache.jsp.adminOnly_jsp._jspService(adminOnly_jsp.java:69)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:750)
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:720)
org.apache.jsp.requestPermission_jsp._jspService(requestPermission_jsp.java:87)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

但是如果我刷新页面,我会收到第一个错误。

这个错误的意思是class无法初始化,但不代表找不到。所以,我的建议是检查 matrixcalculator.MatrixCalculator class 中的静态变量和静态初始化块。看起来在静态块中抛出了未捕获的异常。