我正在尝试编写一个简单的servlet,只需调用本机函数。
首先,我尝试在servlet中加载共享对象,但后来我得到了一个“UnsatisfiedLinkError”,因为该库已经加载到JVM中。在搜索此问题后,我找到了tomcat documentation。
它基本上说我必须编写一个在服务器启动时执行的加载程序。所以我写了下面的课:
class MyLibLoader
{
static
{
System.loadLibrary("foo");
}
native void doFoo();
public static void main(String[] args)
{
System.out.println("Lib loaded");
}
}
将其编译为.class文件并将其放在“$ CATALINA_HOME / shared / lib /”文件夹中,将“catalina.properties”文件中的属性“shared.loader”编辑为以下内容:
shared.loader="${catalina.home}/shared/lib"
重新启动tomcat后没有错误,我在servlet中得到以下异常:
java.lang.UnsatisfiedLinkError中
根据我的理解,这意味着没有加载JNI库。我试图将库名更改为一个肯定不存在的名称,然后你去了:我可以重启tomcat而不会发现找不到库的错误。我还尝试将加载器放在.jar文件中,将属性更改为:
shared.loader="${catalina.home}/shared/lib/*.jar"
它也不起作用。
基于此我假设tomcat只是忽略了“shared.loader”属性。