【问题标题】:Read data from a website using Nashorn使用 Nashorn 从网站读取数据
【发布时间】:2018-07-15 03:39:04
【问题描述】:

我想使用 Nashorn 脚本引擎从网站检索数据

我有可以从示例网站模板中检索数据的 java 代码。

现在我想从 java 脚本文件中调用那个 java 文件。

以下是代码:

JAVA 代码(Nsample.java):

package sample;
import java.net.*;
import java.io.*;


public class Nsample
{
public static void main(String[] args)
{
String output  = getUrlContents("https://freewebsitetemplates.com/");
System.out.println(output);
}



public static String getUrlContents(String theUrl)
{
StringBuilder content = new StringBuilder();


try
{

  URL url = new URL(theUrl);


  URLConnection urlConnection = url.openConnection();


  BufferedReader bufferedReader = new BufferedReader(new 
  InputStreamReader(urlConnection.getInputStream()));

  String line;


  while ((line = bufferedReader.readLine()) != null)
  {
    content.append(line + "\n");
  }
   bufferedReader.close();
  }
  catch(Exception e)
  {
  e.printStackTrace();
  }
  return content.toString();
  }
 }

JAVASCRIPT 代码:(sample.js)

var n = Java.type('C.JavaFolder.sample.Nsample');

var result = n.getUrlContents("https://freewebsitetemplates.com/");
print(result);

我正在尝试使用命令提示符编译 javascript 代码,但它显示 CLASSNOTFOUNDEXCEPTION。

命令是 jjs sample.js。我假设我在 Java.type() 函数中犯了一些错误。

谁能解决这个问题?

【问题讨论】:

  • 您正在尝试从 Javascript 运行 Java?它是 Java 小程序吗?
  • 是的,我正在尝试从 java 脚本运行 java。主要是我想调用 java 类中的方法。你能帮我吗?
  • 它是服务器应用程序还是 Java 小程序?
  • 这是一个小程序
  • 我自己从来没有做过,但是快速搜索一下这个例子,它看起来很简单......docs.oracle.com/javase/tutorial/deployment/applet/…

标签: javascript java nashorn


【解决方案1】:

这一行是有问题的行:

var n = Java.type('C.JavaFolder.sample.Nsample');

Java.type 接受完全限定的 java 类型名称。根据您的 Java 代码,您的包似乎是“sample”,类名是“Nsample”。所以完全限定的类名是“sample.Nsample”。

您应该编译您的 Java 类并在 -classpath 选项中指定目录(如果您使用带有 nashorn 的 javax.script API,则为 jjs 工具或您的 java 应用程序)。

【讨论】:

    【解决方案2】:

    我没有从 JavaScript 调用 Java,而是尝试从 java 调用 JavaScript 并且效果很好。

    我在 JavaScript 中创建了一些函数,并从 Java 代码中调用了这些函数。 以下是代码。希望对您有所帮助。

    Test.java:

    import javax.script.*;
    import java.io.*;
    import java.util.*;
    
    
    public class Test{
    public static void main(String[] args) throws Exception{
    
    
     ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");
     engine.eval(new FileReader("test.js"));
    
    
     Invocable invoke = (Invocable)engine;
    
     Object res = invoke.invokeFunction("httpGet","https://www.javaworld.com");
     System.out.println(res);
    
    
    }
    
    }
    

    test.js:

    var httpGet = function(theUrl){
    var con = new java.net.URL(theUrl).openConnection();
    con.requestMethod = "GET";
    
    return asResponse(con);
    }
    
    function asResponse(con){
    var d = read(con.inputStream);
    
    return d;
    }
    
    function read(inputStream){
    var inReader = new java.io.BufferedReader(new 
    java.io.InputStreamReader(inputStream));
    var inputLine;
    var response = new java.lang.StringBuffer();
    
    while ((inputLine = inReader.readLine()) != null) {
           response.append(inputLine);
    }
    inReader.close();
    return response.toString();
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      相关资源
      最近更新 更多