【问题标题】:Using openCV with jsp leads to an UnsatisfiedLinkError?将 openCV 与 jsp 一起使用会导致 UnsatisfiedLinkError?
【发布时间】:2014-01-28 14:10:24
【问题描述】:

这是我在我的 jsp 页面中放置的代码,只是为了测试它是否工作正常。 jsp 页面无需使用任何 opencv 类即可正常工作。 但是我在使用 opencv 库的对象时遇到了这个错误。

<%@ page import="org.opencv.core.*" %>
<%@ page import="org.opencv.highgui.Highgui" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Title</title>
</head>
<body>
<%
System.loadLibrary("opencv_java248");
Mat img = Highgui.imread("F:/project/im2.jpg");
%>

</body>
</html>

附上错误页面了解详情:

错误代码是:

Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:553)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:442)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


root cause 
javax.servlet.ServletException: java.lang.UnsatisfiedLinkError: org.opencv.highgui.Highgui.imread_1(Ljava/lang/String;)J
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:911)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:840)
    org.apache.jsp.first_jsp._jspService(first_jsp.java:79)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


root cause 
java.lang.UnsatisfiedLinkError: org.opencv.highgui.Highgui.imread_1(Ljava/lang/String;)J
    org.opencv.highgui.Highgui.imread_1(Native Method)
    org.opencv.highgui.Highgui.imread(Highgui.java:359)
    org.apache.jsp.first_jsp._jspService(first_jsp.java:68)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

【问题讨论】:

    标签: java jsp opencv


    【解决方案1】:

    不满意的链接错误告诉您,没有找到具有这样名称的库。 见这里:OpenCV + Java = UnsatisfiedLinkError

    顺便说一句,您真的不应该在 JSP 中使用代码。创建一个对图像执行所需操作的 Servlet,将其路径/URL 添加为属性request.setAttribute("key", "value")

    使用RequestDispatcher

    getServletContext().getRequestDispatcher("/path/to/page.jsp").forward(request, response)

    将请求和响应转发给JSP。然后您可以使用${key} 引用它。

    【讨论】:

    • 感谢@oskopek 的回答。我能知道为什么我不应该在jsp 中使用代码吗?我搜索了很多,但也没有找到 jsp 和 opencv 的任何内容?为什么?
    • 自从标签库出现以来,不推荐使用所谓的脚本。它们很难使用:不可重用的代码、痛苦的调试以及 html 变得混乱。请参阅 Oracle 的 Code conventions for JSP。另外,this answer 总结得很好。
    • 关于 OpenCV 和 JSP:您没有找到任何东西,因为它们没有任何共同点。 JSP 可用于在后台显示 OpenCV 的操作结果。如果您想使用 OpenCV 在服务器上转换图像,那很好,但您应该在服务器端 POJO 中进行,并像使用 JSP 的常规图像一样显示结果。例如:假设客户端连接到您的服务器,访问 JSP,上传图像。然后,您在服务器端存储/转换图像,并通过使用 Servlet 将他转发到另一个 JSP 让他得到结果。
    • 我已经按照你的建议做了。它曾经工作过一次,现在它给了我一个错误 ClassDefNotFoundError .. 找了一整天,但找不到任何解决方案。
    • 你能把你的代码和堆栈跟踪发布到某个地方,然后在这里粘贴一个链接吗?
    猜你喜欢
    • 2019-09-19
    • 2019-12-31
    • 2019-08-04
    • 2011-06-30
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 2013-11-11
    • 2014-12-25
    相关资源
    最近更新 更多