的Java代码在应用程序,而不是在Servlet的

问题描述:

这里的情况。的Java代码在应用程序,而不是在Servlet的

我在一个Java Web应用程序,其中包括两个.jar文件和一个名为.dylib机库实现面部识别软件。在普通的java应用程序中,代码工作正常,但是当我尝试在servlet中加载库时,出现无法找到.dylib的错误。我怎样才能让servlet加载库,以便我可以访问面部识别软件?

这是我的代码。适用的Java应用程序。

public static void main(String[] args) { 

    FSDK.ActivateLibrary("G2TfLOGUH8hQehjxiB..."); 
    FSDK.Initialize(); 
    FSDK.Finalize(); 
} 

这是servlet。

@WebServlet(name = "glassesServlet", urlPatterns = {"/glassesServlet"}) 
public class glassesServlet extends HttpServlet { 

/** 
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 

    try { 

    FSDK.ActivateLibrary("G2TfLOGUH8hQehjxiBZtJvjmwyu..."); 
    FSDK.Initialize(); 
    FSDK.Finalize(); 

    } finally {    
     out.close(); 
    } 
} 

现在,这里的错误是,服务器每次我尝试从服务器运行给。

WARNING: StandardWrapperValve[glassesServlet]: PWC1406: Servlet.service() for servlet   
java.lang.NoClassDefFoundError: Could not initialize class Luxand.FSDK$IFaceSDK 

加上其他一些代码,详细说明了它的发源地。该类Luxand.FSDK$IFaceSDK是存储在Library文件夹中的.jar文件中的一个类。

任何帮助将是伟大的,谢谢!

+0

如果这是Linux的我说你会希望确保本机库中的LD_LIBRARY_PATH servlet容器 – antlersoft 2011-12-14 17:19:57

确保库文件夹是在部署环境

上述两个答案都是正确的类路径。为了给出一个更详细一点...

在你的笔记本电脑,它可能正从你的项目的根拿起名为.dylib文件。

在Linux上,你需要的.so文件。只要它位于LD_LIBRARY_PATH环境变量路径上,它的位置并不重要。我发现最简单的方法是在启动服务器的命令行上设置它。

因此,如果您使用的是脂肪JAR,它会是这样的:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/luxand/luxand-something.so java -jar Server.jar -Dsomeothersetting=something