Versuchen Sie, JavaScript in Java aufzurufen

Einführung

Dieses Mal werde ich üben, wie man JavaScript in einer Java-Anwendung verwendet. Es gibt zwei Möglichkeiten, JavaScript in einer JSP und in einer Java-Datei zu üben.

Entwicklungsumgebung

eclipse tomcat java

Führen Sie JS mit JSP-Datei aus

IndexServlet.java index.jsp main.js Wird erstellt.

image.png

Es ist eine solche Hierarchie.

servlet.IndexServlet.java


package servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class IndexServlet
 */
@WebServlet("/IndexServlet")
public class IndexServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public IndexServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

Das Servlet ist ohne Berührung in Ordnung. (Weil der Zweck darin besteht, JS mit JSP auszuführen)

index.jsp


<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<style>
.box1 {
    width: 200px;
    height: 200px;
    background-color: #ccffcc;
}
.box2 {
  width: 200px;
  height: 200px;
  background-color: #ddd;
}
</style>
<body>
	<h1>JS-Ausführungsbestätigung in JSP</h1>
	<div class="box1">box1</div>

	<div class="box2">box2</div>

	<form action="IndexServlet" method="post">
Benutzeridentifikation:<input type="text" name="user_id" id="user_id">
Passwort:<input type="password" name="pass" id="pass">
      <input type="submit" value="Einloggen" id="btn">
  	</form>
  <input type="button" value="Siehe Passwort" id="passshow">
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="main.js"></script>
</body>
</html>

・ Ein Feld, dessen Farbe sich ändert, wenn Sie darauf klicken ・ Box, die mit dem Mauszeiger die Farbe ändert ・ Validierung des Anmeldeformulars Wir werden die drei umsetzen.

main.js


/* ---------Verarbeitung beim Klicken---------*/
$('.box1').on('click', (e) => {
	$(e.target).css({'background-color': 'skyblue' });
});
/*  ------Was passiert, wenn Sie mit der Maus darüber fahren?----------*/
const onMouseenter = (e) => {
  $(e.target).css({
    'background-color': '#ff9999',
  });
};
const onMouseleave = (e) => {
  $(e.target).css({
    'background-color': '#dddddd',
  });
};
$('.box2')
  .on('mouseenter', onMouseenter)
  .on('mouseleave', onMouseleave);
/*--------Machen Sie das Passwort sichtbar--------------*/
$('#passshow').on('click', () => {
  $('#pass').attr('type', 'text');
});
/*----------Legen Sie die Validierung beim Login fest(Wenn es leer ist, spielen Sie)----------- */
$('#btn').on('click', (e) => {
  const id = $('#user_id').val();
  const pass = $('#pass').val();
  if(!id){
    e.preventDefault();
    console.log(id);
    alert('ID ist leer');
  }
  if(!pass){
    e.preventDefault();
    console.log(pass);
    alert('Das Passwort ist leer');
  }
})

Wir konnten JS wie oben beschrieben implementieren. (Ich konnte es genau so implementieren, wie es in HTML war.)

Führen Sie JS für eine Java-Datei aus

Als nächstes werde ich eine der Methoden zum Ausführen von JS in einer Java-Datei vorstellen. Alle Erklärungen sind im Code enthalten, schauen Sie also bitte vorbei. .. ..

Der folgende Code beschreibt die folgende Seite im Java-Dokumentationshandbuch von Oracle. https://docs.oracle.com/javase/jp/8/docs/technotes/guides/scripting/prog_guide/api.html

test.java


import java.io.File;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class test {

	public static void main(String[] args) throws Exception{
		//Erstellen Sie eine ScripteEnginManager-Instanz
		ScriptEngineManager factory = new ScriptEngineManager();
		//Geben Sie die JS-Skript-Engine mit der Methode getEngineByName der ScripteEngineManager-Instanz an
		ScriptEngine engine = factory.getEngineByName("JavaScript");

		//Verwendung der JS-Engine---------------------------------
		//Anzeige auf der Konsole ・ Skript als JS-Anweisung auswerten
		engine.eval("print('Hello World')");

	//Klasse Java zum Lesen von Zeichendateien.io.Sie können jede JS-Datei mit FileReader ausführen
		//Wenn sich dasselbe Paket in derselben Hierarchie befindet
		File file1 = new File("src/test.js");
		engine.eval(new java.io.FileReader(file1));
		//Im Ressourcenordner auf derselben Ebene wie src
		File file2 = new File("resources/test.js");
		engine.eval(new java.io.FileReader(file2));

		//put (Schlüsselname,Sie können den Quellcode im Schlüsselnamen mit (Quellcode) speichern
		engine.put("file", file1);
		//Absoluten Pfad mit getAbsolutePath abrufen ・ Skript als JS-Anweisung auswerten
		engine.eval("print(file.getAbsolutePath())");

		//Funktionen usw. können Variablen zugewiesen werden
		String script1 = "function helle(name) { print('Hello' + name);}";
		//Aufruf nach Variablenname(Im Motor gespeichert)- Bewerten Sie das Skript als JS-Anweisung
		engine.eval(script1);
		//In der Engine gespeicherte Funktionen und Methoden aufrufen. → Sie können Funktionen usw. ausführen. * Invocable bedeutet, dass Sie aufrufen können
		Invocable inv1 = (Invocable) engine;
		//Diesmal ist es eine Funktion, also invokeFunction("Funktionsname, der aufgerufen werden soll", "Streit")Kann mit ausgeführt werden
		inv1.invokeFunction("helle", "Taro");

		//"obj"Erstellen Sie ein Objekt mit dem Namen"obj"Definieren Sie auch die Methode des Objekts
		String script2 = "var obj = new Object(); "
				+ "obj.goodbye = function(name){print('Goodbye' + name + 'Herr.');}";
		//In Engine speichern ・ Skript als JS-Anweisung auswerten
		engine.eval(script2);
		//Motor aufrufbar machen
		Invocable inv2 = (Invocable) engine;
		//Holen Sie sich das Objekt mit der Methode, die Sie aufrufen möchten (machen Sie es funktionsfähig)
		Object obj1 = engine.get("obj");
		//Diesmal ist es eine Methode, also invokeMethod(Objektname, "Methodenname", "Streit")Laufen Sie weiter
		inv2.invokeMethod(obj1, "goodbye", "Jiro");

	//Skriptfunktionen können als Methoden der Runnable-Schnittstelle behandelt werden. ・ Kann global verwendet werden
		//Funktionsgenerierung ohne Argumente
		String script3 = "function run() { print('java.lang.Rufen Sie die Runnable-Schnittstelle auf'); }";
		//Machen Sie das Skript als JS-Anweisung auswertbar und aufrufbar
		engine.eval(script3);
		Invocable inv3 = (Invocable) engine;
		//Holen Sie sich Runnable (Schnittstelle) und implementieren Sie die Skriptfunktion (inv3) als Methode r1
		Runnable r1 = inv3.getInterface(Runnable.class);
		//Erstellen Sie, indem Sie die Methode r1 an das Thread-Objekt übergeben (wo die Runnable-Schnittstelle implementiert ist).
		Thread th1 = new Thread(r1);
		//Starten Sie die Ausführung
		th1.start();


		//Argumentlose Methodengenerierung
		String script4 = "var obj = new Object();"
				+ "obj.run = function() {print('Aufruf der Runnable-Methode');}";
		//Als Skript ausgewertet
		engine.eval(script4);
		//Erlaube, dass obj als Objekt behandelt wird
		Object obj2 = engine.get("obj");
		//Mach es aufrufbar
		Invocable inv4 = (Invocable) engine;
		//Holen Sie sich Runnable (Schnittstelle) und implementieren Sie die Skriptfunktion (inv4) als Methode r2
		Runnable r2 = inv4.getInterface(obj2, Runnable.class);
		//Erstellt durch Übergabe der Methode r1 an das Thread-Objekt (wo die Runnable-Schnittstelle implementiert ist)
	    Thread th2 = new Thread(r2);
	    th2.start();

	}
}

Schließlich

Wenn Sie Java und JS wie diesmal eingeführt kombinieren können, können Sie anscheinend dynamischere Seiten erstellen.

Recommended Posts

Versuchen Sie, JavaScript in Java aufzurufen
Versuchen Sie, den CORBA-Dienst unter Java 11+ aufzurufen
Versuchen Sie es mit RocksDB mit Java
Lassen Sie uns Spresense mit Java entwickeln (1)
Probieren Sie den Funktionstyp in Java aus! ①
Versuchen Sie, synchronisierte Methoden aus mehreren Threads in Java aufzurufen
Versuchen Sie, Android Hilt in Java zu implementieren
Java, JavaScript, C # (Unterschied in der Zuordnung)
Versuchen Sie, Selenuim 3.141.59 mit Eclipse (Java) auszuführen.
Versuchen Sie einen If-Ausdruck in Java
Versuchen Sie, AWS X-Ray in Java auszuführen
Versuchen Sie, Yuma in Java zu implementieren
Versuchen Sie, Project Euler in Java zu lösen
Partisierung in Java
Versuchen Sie, n-ary Addition in Java zu implementieren
Rufen Sie Java-Methoden aus JavaScript auf, das in Java ausgeführt wird
Versuchen Sie es mit der Stream-API in Java
Probieren Sie Java 8 Stream aus
Änderungen in Java 11
Probieren wir WebSocket mit Java und Javascript aus!
Janken in Java
Versuchen Sie es mit der JSON-Format-API in Java
Verwenden Sie "Rhino", das JavaScript in Java ausführt
Java und JavaScript
Lassen Sie uns eine Taschenrechner-App mit Java erstellen
Versuchen Sie, Nim von Java über JNI aufzurufen
Umfangsrate in Java
Versuchen Sie es mit Java 9
FizzBuzz in Java
Versuchen Sie, etwa 30 Zeilen in Java zu kratzen (CSV-Ausgabe)
Versuchen Sie, ein Bulletin Board in Java zu erstellen
Versuchen Sie, den CORBA-Dienst von Spring (Java) aus aufzurufen.
Zweite Abkochung: Versuchen Sie einen If-Ausdruck in Java
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden
Unterschiede beim Schreiben von Java-, C # - und Javascript-Klassen
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
Interpreter-Implementierung durch Java
Machen Sie einen Blackjack mit Java
Janken App in Java
Einschränkungsprogrammierung in Java
Setzen Sie Java8 in Centos7
NVL-artiger Typ in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
Versuchen Sie es mit der JSON-Format-API in Java
Kommentare in der Java-Quelle
Azure funktioniert in Java
Versuchen Sie LetCode in Ruby-TwoSum
Formatieren Sie XML in Java
Einfache HTML-Spezialchars in Java
Boyer-Moore-Implementierung in Java
Hallo Welt in Java
Verwenden Sie OpenCV mit Java
WebApi-Memorandum mit Java
Typbestimmung in Java
Befehle in Java ausführen (Ping)
Verschiedene Threads in Java
Implementierung der Heap-Sortierung (in Java)