2009-05-19 21 views
9

Đây là tình huống của tôi:Cách tải các tệp .js vào ngữ cảnh tê giác trong Java

Tôi có quyền truy cập vào đối tượng Ngữ cảnh Rhino trong một lớp Java. Tôi muốn đọc trong một loạt các tập tin .js và chuyển chúng vào bối cảnh tê giác để chúng được đánh giá. Tôi không thực sự quan tâm đến việc có các hàm trong các tệp .js có sẵn trong ngữ cảnh kịch bản nhiều như tôi chỉ có các biến được khai báo trong các tệp .js có sẵn (đây là một kiểu xác nhận vấn đề công cụ).

Lý tưởng nhất là tôi sẽ đọc và cố gắng đánh giá từng tệp một lúc, chứ không phải từng dòng một. Tôi nhận thấy có một phương thức trong Ngữ cảnh (xem Rhino API) được gọi là evaluateReader(). Đoán đầu tiên của tôi là tôi nên tải tất cả các tệp mà tôi muốn tải, xem qua tất cả, và gọi phương thức này truyền vào một số đối tượng trình đọc cho từng đối tượng và tuyệt vời, bây giờ tất cả chúng đều trong ngữ cảnh kịch bản của tôi. Vì vậy, giả sử rằng tôi đang đi đúng hướng ở đó, bất cứ ai có thể cho tôi biết nếu có bất kỳ thực hành tốt nào để theo dõi việc sử dụng các tệp .js trong ngữ cảnh tập lệnh Java, hoặc nếu có cách nào tốt hơn, hoặc bạn đã làm nó một số cách khác, vv?

Không tìm kiếm chi tiết triển khai ở đây, chỉ phản hồi từ những người khác có thể đã thực hiện điều này trong một số mã của họ. Lộn xộn với các ngôn ngữ kịch bản từ Java là mới đối với tôi.

Trả lời

12

Bạn có biết rằng Rhino ships in Java 6?

String javaScriptExpression = "sayHello(name);"; 
Reader javaScriptFile = new StringReader(
    "function sayHello(name) {\n" 
     + " println('Hello, '+name+'!');\n" + "}"); 

ScriptEngineManager factory = new ScriptEngineManager(); 
ScriptEngine engine = factory 
    .getEngineByName("JavaScript"); 
ScriptContext context = engine.getContext(); 
context.setAttribute("name", "JavaScript", 
    ScriptContext.ENGINE_SCOPE); 

engine.eval(javaScriptFile); 
engine.eval(javaScriptExpression); 

Nếu bạn muốn sử dụng nó với Java 5, bạn sẽ phải tách riêng API download. Bạn có thể tải các công cụ cho nhiều ngôn ngữ kịch bản phổ biến từ scripting.dev.java.net.

+0

"Bạn có thể tải các công cụ cho nhiều ngôn ngữ kịch bản phổ biến từ scripting.dev.java.net." Không, chúng ta không thể nữa. Tôi biết điều này là rất cũ, nhưng có một liên kết mới hơn chúng ta nên sử dụng? – hexafraction

+0

@hexafraction Hãy thử câu hỏi này: http://stackoverflow.com/questions/11838369/where-can-i-find-a-list-of-available-jsr-223-scripting-languages ​​ – McDowell

+0

+1 Cảm ơn, đó và lưu trữ web có [đã giúp] (http://web.archive.org/web/20070610234337/https://scripting.dev.java.net/), vì sau này chỉ là một liên kết thực sự. – hexafraction

Các vấn đề liên quan