我想使用Nashorn脚本引擎从网站检索数据
我有java代码,我可以从示例网站模板中检索数据。
现在我想从java脚本文件中调用该java文件。
以下是代码:
JAVA代码(Nsample.java):
sparkContext.cancelAllJobs();
sparkContext.stop();
JAVASCRIPT代码:(sample.js)
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代码,但它显示CLASSNOTFOUNDEXCEPTION。
命令是 jjs sample.js 。我假设我在Java.type()函数中犯了一些错误。
任何人都可以解决这个问题吗?
答案 0 :(得分:0)
这一行是有问题的一行:
var n = Java.type('C.JavaFolder.sample.Nsample');
Java.type接受完全限定的java类型名称。根据您的Java代码,您的软件包似乎是" sample"和班级名称是" Nsample"。因此,完全限定的类名称为" sample.Nsample"。
你应该编译你的Java类并在-classpath选项中指定目录(jjs工具或你的java应用程序,如果你使用nashorn的javax.script API)。
答案 1 :(得分:0)
我没有从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();
}