[JAVA] Créez une application Web simple avec Dropwizard

Créez une application Web simple avec Dropwizard

L'objectif de cette fois

--Créer une application Web simple --Lorsque vous entrez à partir de l'écran, le contenu de l'entrée sera renvoyé.

Environnement de développement

Fichier implémenté cette fois

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

Procédure d'exécution

  1. Créer un projet maven
  2. Créez un fichier de paramètres
  3. Créez pom.xml
  4. Créez config.yml
  5. Création d'une classe principale pour Dropwizard
  6. Créer une classe de configuration
  7. Créer une classe d'application
  8. Créez un socket côté serveur
  9. Créez SampleResource.java
  10. Création d'écran
  11. Créez index.html
  12. Créez index.js
  13. Construire
  14. Exécuter

1. Créer un projet maven

En utilisant eclipse, cliquez avec le bouton droit dans l'Explorateur de projets → Nouveau → Projet Maven → Projet Maven → Cliquez sur Suivant Cette fois, cochez Créer un projet simple et cliquez sur Suivant Entrez un ID de groupe (ID d'organisation), un ID d'artefact (ID d'identification, qui sera le nom du projet), vérifiez que l'emballage est un pot, puis cliquez sur Terminer.

image.png

En fonction des paramètres d'éclipse, la configuration de package suivante sera terminée.

image.png

2. Créez un fichier de paramètres

Ici, spécifiez le package à utiliser dans maven dans pom.xml et définissez l'application dans config.yml.

2-1. Créez pom.xml

Sélectionnez et éditez pom.xml créé directement sous le projet. Il est nécessaire de décrire que dropwizard est utilisé ici, et cette fois, spécifiez la bibliothèque nécessaire, la classe principale et maven-shadow en supposant que fat-jar au moment de la construction.

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. Créez config.yml

Décrivez les paramètres utilisés dans l'application. Cette fois, créez un fichier yml (n'importe quel nom) directement sous la racine du projet (au même emplacement que pom.xml), Spécifiez le port et définissez le chemin racine lors du démarrage de l'application. Avec les paramètres ci-dessous, l'application se lance sur le port 8090 et le chemin racine est défini sur / api /.

config.yml


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

  rootPath: '/api/*'

3. Création d'une classe principale pour Dropwizard

Nous créerons les fichiers nécessaires avec Dropwizard. Cette fois, j'ai créé un package appelé dropTest.priv.jp.y.suzuki sous src / main / java et créé une classe principale en dessous.

3-1. Création de la classe de configuration

Ici, définissez les paramètres de chaque environnement. Les informations contenues dans le fichier yaml décrit à l'étape précédente seront chargées dans cette classe. Par exemple, supposons que vous ayez défini les paramètres suivants (décrits) dans le fichier yaml.

config.yml


~ Omis ~

# template sentence
template: Hello!!

Créez ensuite une classe de configuration comme indiqué ci-dessous

DropTestConfiguration.java


package priv.jp.y.suzuki;

import io.dropwizard.Configuration;

public class DropTestConfiguration extends Configuration {

    /**Lire à partir du fichier de paramètres*/
    private String template;

    public String getTemplate() {
        return template;
    }

}

En faisant cela, vous pouvez lire ceci dans la classe Application etc. et l'utiliser.

3-2. Création d'une classe d'application

Créez une classe Application positionnée pour être la classe principale de Java. Ici, la fonction principale, les paramètres du bundle et l'enregistrement de la classe de ressources sont exécutés. Je n'ai pas encore créé la classe de ressources, je vais donc la commenter.

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> {
  //Réglages principaux
  public static void main(String[] args) throws Exception {
    new DropTestApplication().run(args);
  }

  //Paramètres du bundle
  @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"));
  }

  //Inscription de classe de ressources
  @Override
  public void run(DropTestConfiguration conf, Environment env) throws Exception {
    
    //Obtenir les informations lues à partir du fichier de paramètres
    String template = conf.getTemplate();
    System.out.println(template); //S'il pouvait être lu
    // env.jersey().register(new SampleResource());
  }

}

4. Créez un socket côté serveur

Créez une classe de ressources qui a pour rôle de recevoir des valeurs du côté de l'écran. Le lieu de création est le suivant.

Lieu de création: dropTest.priv.jp.y.suzuki.resource

Cette fois, il prend une valeur et la renvoie avec "" mot d'entrée: ""

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 = "Mot d'entrée:" + sentence;
		return message;
	}
}

Les points ci-dessus sont des annotations diverses.

-- @ POST spécifie que l'appel doit être effectué uniquement pendant la communication POST. -- @ Consumes@ Produces spécifie le format d'entrée / sortie. Cette fois, le format JSON et le format TEXT sont spécifiés. -- @ PathParam est spécifié pour recevoir la valeur de l'écran, et la partie {phrase} est acquise avec le type spécifié (String cette fois). -- @ Path spécifie la cible de l'appel lors de la communication REST par URL

Dans ce cas, cette classe de ressources est / message et la méthode que vous voulez exécuter est / response / {phrase}. Par conséquent, il est supposé être exécuté avec l'URL suivante, y compris le chemin racine spécifié dans le fichier yml.

Communication POST: / api / message / response /" instruction d'entrée "

Enfin, enregistrez la classe de ressources avec la classe Application créée jusqu'à présent, et vous avez terminé.

DropTestApplication.java


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

  // ~Omission~

  //Inscription de classe de ressources
  @Override
  public void run(DropTestConfiguration conf, Environment env) throws Exception {
    
    //Obtenir les informations lues à partir du fichier de paramètres
    String template = conf.getTemplate();
    System.out.println(template); //S'il pouvait être lu
    env.jersey().register(new SampleResource()); //Validez ce qui a été commenté plus tôt
  }

}

5. Création d'écran

Ici, html et javascript sont décrits pour créer l'écran. Tout d'abord, créez un dossier appelé ʻassets sous src / main / resources. Créez un fichier ʻindex.html et un dossierjs sous les ʻassetscréés, Dans le dossierjs créé, créez un fichier javascript qui décrit le mouvement de ʻindex.html (cette fois, ʻindex.js`).

Exemple de package: src/main/resources   |__ assets     |__ index.html     |__ js       |__ index.js

5-1. Créez index.html

Cette fois, je vais en créer un simple qui affiche le champ de saisie, le bouton d'envoi et les caractères renvoyés par le serveur. Il est supposé que jQuery sera utilisé pour l'affichage à l'écran et la communication REST. Par conséquent, [Téléchargez] jQuery (https://code.jquery.com/jquery-3.2.1.min.js) et placez-le dans le fichier js.

<!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="Communication REST"><br>

<div><span id="result">Le contenu de la réponse est écrit ici</span></div>

</body>
</html>

5-2. Créez index.js

Ici, la communication REST est exécutée lorsque le bouton est enfoncé et le résultat est sorti. Cette fois, nous utiliserons l'ajax de jQuery.

index.js



/**Répond à la pression du bouton*/
$(document).on('click', '#start', function() {
  var SendData = $("#inputSentence").val();
  Request("/api/message/response/" + SendData, "POST", null, resultOpen, FailAnon);
  return false;
});

/**Pour 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;
}

/**Appelé quand ajax échoue*/
function FailAnon() {
  $("#result").html("<b>ERROR!</b>La communication a échoué");
  return false;
}

/**Afficher le résultat*/
function resultOpen(response) {
  $("#result").html(response + "<br>");
  return false;
}

6. Construire

Créez l'application terminée. La construction se fait à Maven. Construisez à partir du répertoire du projet avec la commande suivante. Si "BUILD SUCCESS" s'affiche, cela signifie qu'il réussit. Un fichier jar doit être créé sous le répertoire cible.

Commande de construction: maven package

7. Exécuter

Deux fichiers sont requis pour l'exécution. Il existe deux fichiers, un fichier jar créé par la compilation et un fichier yaml qui est un fichier de configuration.

La commande d'exécution est la suivante.

Exemple de commande d'exécution: java -jar target / droptest-0.0.1-SNAPSHOT.jar server config.yml

À la fin

Ouvrons réellement le Web et vérifions-le lorsque le démarrage est terminé avec succès. Si vous ne pouvez pas vous connecter, la cause peut être facilement comprise en utilisant le journal de sortie ou le mode développeur tel que F12.

image.png

À propos, l'application lancée peut être arrêtée par la commande Ctrl + c comme de nombreuses applications.

Recommended Posts

Créez une application Web simple avec Dropwizard
Créer une application Web avec Javalin
Jusqu'à ce que vous créiez une application Web avec Servlet / JSP (Partie 1)
Créez un lot à la demande simple avec Spring Batch
[Retrait des rails] Créez une fonction de retrait simple avec des rails
Créer un graphique à barres simple avec MPAndroidChart
Créez un serveur Web simple avec la bibliothèque standard Java com.sun.net.httpserver
Créez une application de recherche simple avec Spring Boot
Créer un serveur API Web avec Spring Boot
Créer un environnement de développement d'applications Web Java avec Docker pour Mac Part2
Créez un terrain de jeu avec Xcode 12
Créez un site de démonstration simple avec Spring Security avec Spring Boot 2.1
Application Web construite avec docker (1)
Créez une application JAVA WEB et essayez OMC APM
Créez un CRUD simple avec SpringBoot + JPA + Thymeleaf ③ ~ Ajouter une validation ~
La première application WEB avec Spring Boot-Making a Pomodoro timer-
Créez une application Web Hello World avec Spring Framework + Jetty
Créez un environnement Vue3 avec Docker!
Préparation à la création de l'application Rails
Créez des exceptions avec une interface fluide
Implémentez un serveur API Web REST simple avec Spring Boot + MySQL
Créons une application Web de gestion de livres avec Spring Boot part1
Créez un CRUD simple avec SpringBoot + JPA + Thymeleaf ④ ~ Personnaliser le message d'erreur ~
Créons une application Web de gestion de livres avec Spring Boot part3
Créons une application Web de gestion de livres avec Spring Boot part2
Je souhaite développer une application web!
Créez un fichier jar avec la commande
[Rails6] Créer une nouvelle application avec Rails [Débutant]
Démarrez le développement d'applications Web avec Spring Boot
Créez une classe temporaire avec le nouvel Object () {}
[docker] [nginx] Créer un ALB simple avec nginx
[Rails 5] Créer une nouvelle application avec Rails [Débutant]
Exécutez l'application WEB avec Spring Boot + Thymeleaf
Créez un CRUD simple avec SpringBoot + JPA + Thymeleaf ② ~ Création d'écran et de fonctions ~
Création d'un environnement de développement pour les applications Web Java avec Docker pour Mac Part1
Un débutant Java a essayé de créer une application Web simple à l'aide de Spring Boot
Je souhaite créer un SNS Web sombre avec Jakarta EE 8 avec Java 11
[Java] Déployer une application Web créée avec Eclipse + Maven + Ontology avec Heroku
Créez un serveur de passerelle simple en définissant masquerade avec firewall-cmd de CentOS8
Volume d'essais pour créer une application Web Java sur Windows Server 2016
# 1 [Débutant] Créez une application Web (site Web) avec Eclipse à partir de la connaissance 0. "Construisons un environnement pour créer des applications Web"
Créez un site Web avec Spring Boot + Gradle (jdk1.8.x)
[Memo] Créez facilement un environnement CentOS 8 avec Docker
Créer un CSR avec des informations étendues en Java
Faisons une application de calculatrice avec Java ~ Créez une zone d'affichage dans la fenêtre
[Rails] rails nouveau pour créer une base de données avec PostgreSQL
[Windows] [IntelliJ] [Java] [Tomcat] Créer un environnement pour Tomcat 9 avec IntelliJ
Créons un processus chronométré avec la minuterie de Java! !!
Créez un cadre de traitement par lots simple dans Eclipse.
Créez une application Spring Boot à l'aide d'IntelliJ IDEA
[Java] Créer une collection avec un seul élément
Créons un framework Web ultra-simple avec Java
Créez une discussion d'équipe avec Rails Action Cable