Javaプログラミング/Javaプログラミング関連情報

Java 6でスクリプト言語を使おう(3ページ目)

Java 6で、Javaの中からJavaScriptを実行させてみましょう。

執筆者:掌田 津耶乃

Javaから値を渡し、受け取る


スクリプトの実行そのものはとても簡単に行なえることがわかりました。けれど、このようにただ実行するだけしかできないのでは、あまり高度なことはできそうにありません。ある程度複雑なことを行なわせるためには、JavaからJavaScript側に値を渡したり、JavaScriptから結果を受け取ったり、というようにJavaとJavaScriptの間で相互に情報をやり取りする仕組みが必要でしょう。

では、こうしたJava = JavaScript間のやり取りを含めた形でJSPのソースコードを修正してみましょう。

<%@ page language="java" contentType="text/html; charset=windows-31j"
    pageEncoding="windows-31j"%>

<%@ page import="javax.script.*" %>

<%
String script = request.getParameter("script");
String val = request.getParameter("val");
String result = "";

if (script != null){
  ScriptEngineManager manager = new ScriptEngineManager();
  ScriptEngine engine = manager.getEngineByName("JavaScript");
  
  try {
    System.out.println("val:" + val);
    engine.put("X",val);
    engine.eval(script);
    Object obj = engine.get("result");
    result = obj != null ? obj.toString() : "null";
  } catch(ScriptException ex){
    ex.printStackTrace();
  }
}
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>
※スクリプト<br>
<form method="post" action="test.jsp">
変数X:<input type="text" name="val" value="<%=val %>">
<br>
<textarea name="script" cols=60 rows=5><%=script %></textarea>
<br>
<input type="submit">
</form>
<h4>result:<%=result %></h4>

</body>
</html>

ここでは、テキストエリアの他に変数の入力用のフィールドを用意しました。ここに入力した値は、JavaScriptでは変数Xとして利用できるようになります。また、JavaScriptからの実行結果は「result」という変数として返され、表示されるようにしてあります。これでだいぶ実行できるスクリプトの幅が広がりましたね。

JavaとJavaScriptの値のやり取りは、ScriptEngineの「put」と「get」で行なうことができます。putは、JavaScriptに第1引数の名前の変数を作成し、第2引数を値として渡します。またgetは、JavaScriptから引数の名前の変数を探し、その値を返します。


  • 前のページへ
  • 1
  • 2
  • 3
  • 4
  • 6
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます