javanet可以用来从网络应用程序调用本机dll吗

can javonet be used to call native dll's from a web application

我正在使用 javanet 将 c# 或 .NET dll 加载到 java 中,当 运行 作为控制台应用程序但不适用于 Web 应用程序时,它工作得很好。

它甚至适用于 Web 应用程序吗?

我刚刚为您创建了示例 Tomcat v9.0 项目,您可以将其用作参考。你可以在这里找到它: https://github.com/Javonet/tutorials/tree/master/JavonetTomcatWebApp

示例包含两个 Eclipse 项目:

  • TomcatMiddleApp 编译为 JAR(常规 Java 包定义一个 class 使用 Javonet 使用 .NET Random 生成随机数class)
  • TomcatJavanetTest web 项目(添加 Javonet 和 TomcatMiddleApp 作为参考并定义一个 *.jsp 的常规 web 项目显示随机数)

我在 Eclipse 中的设置如下所示:

如您所见,我只是将 Javonet 和 TomcatMiddleApp 复制到 "WEB-INF/lib" 文件夹。

我的TestJavonet.java文件的内容是:

    package TomcatMiddleApp;


import com.javonet.Javonet;
import com.javonet.JavonetException;
import com.javonet.JavonetFramework;
import com.javonet.api.NObject;


public class TestJavonet {
    public static final String TMP_DIR = System.getProperty("java.io.tmpdir");
    public String CallDotNetRandom()
    {
        try {
            System.out.println("Setting temporary directory for Javonet lic file to: "+TMP_DIR);
            //Notice I set here temp dir for Javonet lic file by default it will try to save in system32 and will fail
            Javonet.setLicenseDirectory(TMP_DIR);
            Javonet.activate("******", "******",JavonetFramework.v45);
            NObject objRandom = com.javonet.Javonet.New("System.Random");
            Integer value = objRandom.invoke("Next",10,20);
            return value.toString();

        } catch (JavonetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return e.getMessage();
        }
    }
}

我的 main.jps 文件是:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Insert title here</title>
</head>
<body>
<%
TomcatMiddleApp.TestJavonet middleApp = new TomcatMiddleApp.TestJavonet();
%>
    <%= "Hello Javonet! Random number generated on .NET side:"+middleApp.CallDotNetRandom() %>
</body>
</html>

其他文件没有什么特别之处。您不需要使用单独的 JAR 来定义您的逻辑,您可以将 classes 直接放在 Tomcat 网络项目中。

并且您可以在 Java Web 项目中轻松使用 .NET 库。