2014-01-09 52 views
0

這是我放在我的jsp頁面中的代碼,只是爲了測試它是否工作正常。 沒有任何使用opencv類的jsp頁面正常工作。 但我在使用opencv庫的對象時出現了這個錯誤。在jsp中使用openCV會導致UnsatisfiedLinkError?

<%@ 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> 

附加錯誤頁的詳細信息: enter image description here

錯誤代碼是:

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) 

回答

1

未被滿足的鏈接錯誤是告訴你,有這樣一個名字沒有圖書館找到。 請參閱:OpenCV + Java = UnsatisfiedLinkError

在附註中,您確實不應該在JSP內部使用代碼。創建一個可以對圖像做你想要的Servlet,將它的路徑/ URL添加爲屬性request.setAttribute("key", "value")

使用RequestDispatcher

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

轉發請求和響應的JSP。然後你可以用${key}來引用它。

+0

感謝您的回答@oskopek ..我可以知道爲什麼我不應該在jsp內部使用代碼的原因嗎?我搜索了很多,但也沒有發現什麼與jsp和opencv?爲什麼? – kirtan403

+0

所謂的scriptlet由於taglibs出現而被棄用。他們很難處理:不可重用的代碼,痛苦的調試和html變得混亂。請參閱Oracle的[JSP的代碼約定](http://www.oracle.com/technetwork/articles/javase/code-convention-138726.html)。此外,[這個答案](http://stackoverflow.com/a/3180202/2713162)總結得非常好。 – oskopek

+0

關於OpenCV和JSP:你沒有找到任何東西,因爲它們沒有任何共同之處。 JSP可用於在後臺顯示OpenCV操作的結果。如果你想使用OpenCV來轉換服務器上的圖像,那很好,但是你應該在服務器端POJO中完成,並像使用JSP那樣顯示結果。例如:假設客戶端連接到您的服務器,訪問JSP,上傳圖像。然後,您可以存儲/轉換映像服務器端,並讓他通過使用Servlet將其轉發到另一個JSP來獲得結果。 – oskopek

相關問題