[JAVA] Erstellen Sie mit Dropwizard eine einfache Webanwendung

Erstellen Sie mit Dropwizard eine einfache Webanwendung

Diesmal das Ziel

--Erstellen Sie eine einfache Web-App --Wenn Sie vom Bildschirm aus eingeben, wird der eingegebene Inhalt zurückgegeben.

Entwicklungsumgebung

Datei diesmal implementiert

  1. DropTestApplication.java
  2. DropTestConfiguration.java
  3. SampleResource.java
  4. index.html
  5. index.js
  6. config.yml
  7. pom.xml

Ausführungsverfahren

  1. Erstellen Sie ein Maven-Projekt
  2. Erstellen Sie eine Einstellungsdatei
  3. Erstellen Sie pom.xml
  4. Erstellen Sie config.yml
  5. Erstellen einer Kernklasse für Dropwizard
  6. Erstellen Sie eine Konfigurationsklasse
  7. Erstellen Sie eine Anwendungsklasse
  8. Erstellen Sie einen serverseitigen Socket
  9. Erstellen Sie SampleResource.java
  10. Bildschirmerstellung
  11. Erstellen Sie index.html
  12. Erstellen Sie index.js
  13. Bauen
  14. Führen Sie aus

1. Erstellen Sie ein Maven-Projekt

Klicken Sie mit Eclipse mit der rechten Maustaste in Projektexplorer → Neu → Projekt Maven → Maven-Projekt → Klicken Sie auf Weiter Aktivieren Sie dieses Mal die Option Einfaches Projekt erstellen und klicken Sie auf Weiter Geben Sie eine beliebige Gruppen-ID (Organisations-ID), Artefakt-ID (Identifikations-ID, die der Projektname ist) ein, überprüfen Sie, ob die Verpackung jar ist, und klicken Sie auf Fertig stellen.

image.png

Abhängig von den Eclipse-Einstellungen wird die folgende Paketkonfiguration abgeschlossen.

image.png

2. Erstellen Sie eine Einstellungsdatei

Geben Sie hier das Paket an, das in maven in pom.xml verwendet werden soll, und legen Sie die Anwendung in config.yml fest.

2-1. Erstellen Sie pom.xml

Wählen Sie die direkt unter dem Projekt erstellte Datei pom.xml aus und bearbeiten Sie sie. Es muss beschrieben werden, dass der Drop-Assistent hier verwendet wird, und dieses Mal die erforderliche Bibliothek, Hauptklasse und "Maven-Shade" unter der Annahme eines Fat-Jar zum Zeitpunkt der Erstellung angeben.

pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>priv.jp.y.suzuki</groupId>
  <artifactId>dropTest</artifactId>
  <version>0.0.1-SNAPSHOT</version>

<properties>
    <dropwizard.version>0.9.2</dropwizard.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>


  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <createDependencyReducedPom>true</createDependencyReducedPom>
          <filters>
            <filter>
              <artifact>*:*</artifact>
              <excludes>
                <exclude>META-INF/*.SF</exclude>
                <exclude>META-INF/*.DSA</exclude>
                <exclude>META-INF/*.RSA</exclude>
              </excludes>
            </filter>
          </filters>
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer
                  implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                <transformer
                  implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>dropTest.priv.jp.y.suzuki.DropTestApplication</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>io.dropwizard</groupId>
      <artifactId>dropwizard-core</artifactId>
      <version>${dropwizard.version}</version>
    </dependency>
    <dependency>
      <groupId>io.dropwizard</groupId>
      <artifactId>dropwizard-auth</artifactId>
      <version>${dropwizard.version}</version>
    </dependency>
    <dependency>
      <groupId>io.dropwizard</groupId>
      <artifactId>dropwizard-assets</artifactId>
      <version>${dropwizard.version}</version>
    </dependency>
  </dependencies>
</project>

2-2. Erstellen Sie config.yml

Beschreiben Sie die in der App verwendeten Einstellungen. Erstellen Sie dieses Mal eine yml-Datei (einen beliebigen Namen) direkt unter dem Stammverzeichnis des Projekts (am selben Speicherort wie pom.xml). Geben Sie den Port an und legen Sie den Stammpfad fest, wenn Sie die Anwendung starten. Mit den folgenden Einstellungen wird die App am 8090-Port gestartet und der Root-Pfad auf / api / festgelegt.

config.yml


# Application server setting.
server:
  applicationConnectors:
    - type: http
      port: 8090

  rootPath: '/api/*'

3. Erstellen einer Kernklasse für Dropwizard

Wir werden die erforderlichen Dateien mit Dropwizard erstellen. Dieses Mal habe ich ein Paket namens "dropTest.priv.jp.y.suzuki" unter "src / main / java" erstellt und eine Kernklasse darunter erstellt.

3-1. Erstellung der Konfigurationsklasse

Stellen Sie hier die Parameter für jede Umgebung ein. Die im vorherigen Schritt beschriebenen Informationen in der yaml-Datei werden in diese Klasse geladen. Angenommen, Sie haben die folgenden Einstellungen (beschrieben) in der yaml-Datei vorgenommen.

config.yml


~ Ausgelassen ~

# template sentence
template: Hello!!

Erstellen Sie dann eine Konfigurationsklasse wie unten gezeigt

DropTestConfiguration.java


package priv.jp.y.suzuki;

import io.dropwizard.Configuration;

public class DropTestConfiguration extends Configuration {

    /**Lesen Sie aus der Einstellungsdatei*/
    private String template;

    public String getTemplate() {
        return template;
    }

}

Auf diese Weise können Sie dies in der Anwendungsklasse usw. lesen und verwenden.

3-2. Erstellung von Anwendungsklassen

Erstellen Sie eine Anwendungsklasse, die als Hauptklasse in Java positioniert ist. Hier werden die Hauptfunktion, die Bundle-Einstellungen und die Registrierung der Ressourcenklassen ausgeführt. Ich habe die Ressourcenklasse noch nicht erstellt, daher werde ich sie auskommentieren.

DropTestApplication.java


package dropTest.priv.jp.y.suzuki;

import io.dropwizard.Application;
import io.dropwizard.assets.AssetsBundle;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;

public class DropTestApplication extends Application<DropTestConfiguration> {
  //Haupteinstellungen
  public static void main(String[] args) throws Exception {
    new DropTestApplication().run(args);
  }

  //Bundle-Einstellungen
  @Override
  public void initialize(Bootstrap<DropTestConfiguration> bootstrap) {
    bootstrap.addBundle(new AssetsBundle("/assets", "/", "index.html"));
    bootstrap.addBundle(new AssetsBundle("/assets/css", "/css", null, "css"));
    bootstrap.addBundle(new AssetsBundle("/assets/js", "/js", null, "js"));
  }

  //Registrierung von Ressourcenklassen
  @Override
  public void run(DropTestConfiguration conf, Environment env) throws Exception {
    
    //Holen Sie sich die Informationen aus der Einstellungsdatei gelesen
    String template = conf.getTemplate();
    System.out.println(template); //Ob es gelesen werden konnte
    // env.jersey().register(new SampleResource());
  }

}

4. Erstellen Sie einen serverseitigen Socket

Erstellen Sie eine Ressourcenklasse, die Werte von der Bildschirmseite empfängt. Der Ort der Schöpfung ist wie folgt.

Erstellungsort: dropTest.priv.jp.y.suzuki.resource

Dieses Mal nimmt es einen Wert an und gibt ihn mit dem Eingabewort "" zurück: "

SampleResource.java


package dropTest.priv.jp.y.suzuki.resource;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/message")
public class SampleResource {

	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.TEXT_PLAIN)
	@Path("/response/{sentence}")
	public String responseMessage(@PathParam("sentence") String sentence) {
		String message = "Eingabewort:" + sentence;
		return message;
	}
}

Die obigen Punkte sind verschiedene Anmerkungen.

-- @ POST gibt an, dass der Anruf nur während der POST-Kommunikation getätigt werden soll. -- @ Consumes@ Produces gibt das Eingabe- / Ausgabeformat an. Dieses Mal werden das JSON-Format und das TEXT-Format angegeben. -- @ PathParam wird angegeben, um den Wert vom Bildschirm zu erhalten, und der Teil {Satz} wird mit dem angegebenen Typ (diesmal Zeichenfolge) erfasst. -- @ Path gibt das Anrufziel während der REST-Kommunikation per URL an

In diesem Fall ist diese Ressourcenklasse "/ message" und die Methode, die Sie ausführen möchten, ist "/ response / {satz}". Daher wird angenommen, dass es mit der folgenden URL ausgeführt wird, einschließlich des in der yml-Datei angegebenen Stammpfads.

POST-Kommunikation: / api / message / response /" Eingabeanweisung "

Registrieren Sie abschließend die Ressourcenklasse bei der bisher erstellten Anwendungsklasse, und Sie sind fertig.

DropTestApplication.java


import dropTest.priv.jp.y.suzuki.resource.SampleResource;

  // ~Unterlassung~

  //Registrierung von Ressourcenklassen
  @Override
  public void run(DropTestConfiguration conf, Environment env) throws Exception {
    
    //Holen Sie sich die Informationen aus der Einstellungsdatei gelesen
    String template = conf.getTemplate();
    System.out.println(template); //Ob es gelesen werden konnte
    env.jersey().register(new SampleResource()); //Überprüfen Sie, was zuvor auskommentiert wurde
  }

}

5. Bildschirmerstellung

Hier werden HTML und Javascript beschrieben, um den Bildschirm zu erstellen. Erstellen Sie zunächst einen Ordner mit dem Namen "Assets" unter "src / main / resources". Erstellen Sie eine index.html-Datei und einen js-Ordner unter den erstellten Assets. Erstellen Sie eine Javascript-Datei, die die Bewegung von "index.html" im erstellten "js" -Ordner beschreibt (diesmal "index.js").

Paketbeispiel: src/main/resources   |__ assets     |__ index.html     |__ js       |__ index.js

5-1. Erstellen Sie index.html

Dieses Mal werde ich ein einfaches erstellen, das das Eingabefeld, die Senden-Schaltfläche und die vom Server zurückgegebenen Zeichen anzeigt. Es wird davon ausgegangen, dass jQuery für die Bildschirmanzeige und die REST-Kommunikation verwendet wird. Daher [Download] jQuery (https://code.jquery.com/jquery-3.2.1.min.js) und platzieren Sie es in der js-Datei.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DropwizardTEST</title>
  <script src="js/jquery-3.2.1.min.js"></script>
  <script src="js/index.js"></script>
</head>
<body>
<input type="text" id="inputSentence"><br>
<input type="button" id="start" value="REST-Kommunikation"><br>

<div><span id="result">Der Antwortinhalt wird hier geschrieben</span></div>

</body>
</html>

5-2. Erstellen Sie index.js

Hier wird die REST-Kommunikation ausgeführt, wenn die Taste gedrückt wird, und das Ergebnis wird ausgegeben. Dieses Mal werden wir jQuerys Ajax verwenden.

index.js



/**Reagiert auf Tastendruck*/
$(document).on('click', '#start', function() {
  var SendData = $("#inputSentence").val();
  Request("/api/message/response/" + SendData, "POST", null, resultOpen, FailAnon);
  return false;
});

/**Für Ajax*/
function Request(Uri, Method, Data, CallbackFunc, ErrorCallbackFunc) {
  $.ajax({
    url:  Uri,
    type: Method,
    data: Data,
    contentType: "application/json; charset=utf-8",
    cache: false
  }).done(function(response){
    CallbackFunc(response);
    return false;
  }).fail(function(XMLHttpRequest, textStatus, errorThrown) {
    ErrorCallbackFunc();
    return false;
  });
  return false;
}

/**Wird aufgerufen, wenn Ajax fehlschlägt*/
function FailAnon() {
  $("#result").html("<b>ERROR!</b>Kommunikation fehlgeschlagen");
  return false;
}

/**Zeigen Sie das Ergebnis an*/
function resultOpen(response) {
  $("#result").html(response + "<br>");
  return false;
}

6. Bauen

Erstellen Sie die fertige Anwendung. Der Bau erfolgt in Maven. Erstellen Sie mit dem folgenden Befehl aus dem Projektverzeichnis. Wenn "BUILD SUCCESS" angezeigt wird, ist dies erfolgreich. Eine JAR-Datei sollte unter dem Zielverzeichnis erstellt werden.

Build-Befehl: maven package

7. Führen Sie aus

Für die Ausführung sind zwei Dateien erforderlich. Es gibt zwei Dateien, eine vom Build erstellte JAR-Datei und eine Yaml-Datei, die als Konfigurationsdatei dient.

Der Ausführungsbefehl lautet wie folgt.

Beispiel für einen Ausführungsbefehl: java -jar target / droptest-0.0.1-SNAPSHOT.jar server config.yml

Am Ende

Öffnen wir das Web und überprüfen es, wenn der Start erfolgreich abgeschlossen wurde. Wenn Sie keine Verbindung herstellen können, können Sie die Ursache mithilfe des Ausgabeprotokolls oder des Entwicklermodus wie F12 leicht verstehen.

image.png

Übrigens kann die gestartete App wie viele Apps mit dem Befehl Strg + c gestoppt werden.

Recommended Posts

Erstellen Sie mit Dropwizard eine einfache Webanwendung
Erstellen Sie eine Webanwendung mit Javalin
Bis Sie eine Webanwendung mit Servlet / JSP erstellen (Teil 1)
Erstellen Sie mit Spring Batch eine einfache On-Demand-Charge
[Schienenentnahme] Erstellen Sie eine einfache Entnahmefunktion mit Schienen
Erstellen eines einfachen Balkendiagramms mit MPAndroidChart
Erstellen Sie einen einfachen Webserver mit der Java-Standardbibliothek com.sun.net.httpserver
Erstellen Sie mit Spring Boot eine einfache Such-App
Erstellen Sie einen Web-API-Server mit Spring Boot
Erstellen Sie mit Docker für Mac Teil2 eine Entwicklungsumgebung für Java-Webanwendungen
Erstellen Sie einen Spielplatz mit Xcode 12
Erstellen Sie mit Spring Security 2.1 eine einfache Demo-Site mit Spring Security
Mit Docker erstellte Webanwendung (1)
Erstellen Sie eine JAVA WEB App und probieren Sie OMC APM aus
Erstellen Sie eine einfache CRUD mit SpringBoot + JPA + Thymeleaf ~ ~ Validierung hinzufügen ~
Die erste WEB-Anwendung mit Spring Boot-Making a Pomodoro Timer-
Erstellen Sie eine Hello World-Webanwendung mit Spring Framework + Jetty
Erstellen Sie mit Docker eine Vue3-Umgebung!
Vorbereiten der Erstellung einer Rails-Anwendung
Erstellen Sie Ausnahmen mit einer Fluid-Schnittstelle
Erstellen Sie ein Maven-Projekt mit Befehlen
Implementieren Sie einen einfachen Web-REST-API-Server mit Spring Boot + MySQL
Erstellen wir eine Buchverwaltungs-Webanwendung mit Spring Boot part1
Erstellen Sie eine einfache CRUD mit SpringBoot + JPA + Thymeleaf ④ ~ Fehlermeldung anpassen ~
Lassen Sie uns mit Spring Boot part3 eine Webanwendung für die Buchverwaltung erstellen
Lassen Sie uns mit Spring Boot part2 eine Webanwendung für die Buchverwaltung erstellen
Ich möchte eine Webanwendung entwickeln!
Erstellen Sie mit dem Befehl eine JAR-Datei
[Rails6] Erstelle eine neue App mit Rails [Anfänger]
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Erstellen Sie eine temporäre Klasse mit new Object () {}
[Docker] [Nginx] Erstellen Sie mit Nginx eine einfache ALB
[Rails 5] Erstelle eine neue App mit Rails [Anfänger]
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus
Erstellen Sie eine einfache CRUD mit SpringBoot + JPA + Thymeleaf ② ~ Bildschirm- und Funktionserstellung ~
Erstellen einer Entwicklungsumgebung für Java-Webanwendungen mit Docker für Mac Teil1
Java-Anfänger haben versucht, mit Spring Boot eine einfache Webanwendung zu erstellen
Ich möchte mit Jakarta EE 8 mit Java 11 ein dunkles Web-SNS erstellen
[Java] Stellen Sie eine mit Eclipse + Maven + Ontology mit Heroku erstellte Webanwendung bereit
Erstellen Sie einen einfachen Gateway-Server, indem Sie die Maskerade mit der Firewall-cmd von CentOS8 festlegen
Umfang des Versuchs, eine Java-Webanwendung unter Windows Server 2016 zu erstellen
# 1 [Anfänger] Erstellen Sie eine Webanwendung (Website) mit Eclipse aus Wissen 0. "Lassen Sie uns eine Umgebung zum Erstellen von Web-Apps erstellen"
Erstellen Sie eine Website mit Spring Boot + Gradle (jdk1.8.x)
[Memo] Erstellen Sie mit Docker ganz einfach eine CentOS 8-Umgebung
Erstellen Sie eine CSR mit erweiterten Informationen in Java
Erstellen wir eine Taschenrechner-App mit Java ~ Erstellen Sie einen Anzeigebereich im Fenster
[Rails] Rails neu, um eine Datenbank mit PostgreSQL zu erstellen
[Windows] [IntelliJ] [Java] [Tomcat] Erstellen Sie mit IntelliJ eine Umgebung für Tomcat 9
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
Erstellen Sie in Eclipse ein einfaches Stapelverarbeitungsframework.
Erstellen Sie eine Spring Boot-Anwendung mit IntelliJ IDEA
[Java] Erstellen Sie eine Sammlung mit nur einem Element
Lassen Sie uns mit Java ein supereinfaches Webframework erstellen
Erstellen Sie einen Team-Chat mit Rails Action Cable