[JAVA] Pensez à la combinaison de Servlet et Ajax

En parlant d'applications Web en java, je ne connaissais que le modèle MVC (Servlet + JSP + Beans). J'ai récemment appris qu'il existe une combinaison de ** Servlet + Ajax **, alors enregistrez-la. La fonctionnalité est que ** Servlet peut être appelé à partir de javascript **.

Combinaison de Servlet + JSP + Beans

Puisqu'il est familier, l'explication est omise ici.

java7.jpg

Combinaison de Servlet + Ajax

java8.jpg

En regardant uniquement la figure ci-dessus, il semble qu'il n'y ait pas beaucoup de différence, mais dans le cas de Servlet + Ajax, ** la réponse est reçue par javascript **, il n'est donc pas nécessaire de mettre à jour l'écran un par un.

Mérite 1

Par exemple, vous pouvez accéder indirectement à la base de données depuis javascript via le servlet comme indiqué ci-dessous **. Lors du traitement d'une grande quantité de données, il est également possible de récupérer les données de la base de données en petites quantités.

java9.jpg

Mérite 2

Par rapport à JSP, l'avant et l'arrière sont ** plus indépendants ** pour les raisons suivantes, ce qui facilite le développement (dans certains cas). L'échange est possible si le format JSON est choisi.

・ ** L'appelant est fondamentalement OK avec html + jQuery ** → ** Pas besoin de déclarer des beans ou des classes sur la page ** ・ ** Exchange est uniquement JSON ** ・ ** Pas besoin de mettre à jour l'écran ** ・ ** Plusieurs appels sont possibles comme indiqué dans la figure ci-dessous **

java10.jpg

Demandeur (javascript)

Vous pouvez sélectionner une communication synchrone / asynchrone, mais notez qu'il ne s'agit pas d'un traitement parallèle. Pour le traitement parallèle, voir J'ai essayé d'utiliser javascript WebWorker. Il semble que vous puissiez envoyer la requête JSON elle-même en tant que valeur d'un élément comme Reference.

``sample.js`



function sampleAjax() {

  //Demander JSON
  var request = {
    param1 : "param",
    param2 : 12345
  };

  //Envoyer la demande au servlet avec ajax
  $.ajax({
    type    : "GET",          //GET / POST
    url     : "http://localhost:8080/SampleWeb/urlServlet",  //URL du servlet de destination (à modifier si nécessaire)
    data    : request,        //Demander JSON
    async   : true,           //true:asynchrone(Défaut), false:Synchroniser
    success : function(data) {
      //Message reçu lorsque la communication est réussie
      response1 = data["response1"];
      response2 = data["response2"];
    },
    error : function(XMLHttpRequest, textStatus, errorThrown) {
      alert("Une erreur s'est produite lors de la demande:" + textStatus +":\n" + errorThrown);
    }
  });

}

Recevoir la demande (Servlet)

L'appel DB, etc. est également possible.

``sampleServlet.java`


package servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

@WebServlet(urlPatterns={"/urlServlet"})
public class SvDbViewRange extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    public void doGet (HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {

    try {

        //Acquisition de paramètres
        String param1 = req.getParameter("param1");
        String param2 = req.getParameter("param2");

        //Traitement (appel DB, etc.)
        String response1 = "";
        String response2 = "";

        //production(Stockez la réponse dans la carte et convertissez-la en JSON)

        //Carte JSON
        Map<String, String> mapMsg = new HashMap<String, String>();

        //ajouter à
        mapMsg.put("response1", response1);
        mapMsg.put("response2", response2);

        //Cartographe(JSON <-> Map, List)
        ObjectMapper mapper = new ObjectMapper();

        //chaîne json
        String jsonStr = mapper.writeValueAsString(mapMsg);  //list, map

        //Paramètre d'en-tête
        res.setContentType("application/json;charset=UTF-8");   //Format JSON, UTF-8

        //objet pw
        PrintWriter pw = res.getWriter();

        //production
        pw.print(jsonStr);

        //proche
        pw.close();

    } catch(Exception e) {
        e.printStackTrace();
    }

    }

}

ObjectMapper Maven

Ajoutez ce qui suit à pom.xml.

``pom.xml`



  <dependencies>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.5</version>
    </dependency>
  </dependencies>

Recommended Posts

Pensez à la combinaison de Servlet et Ajax
Pensez aux 7 règles d'Optionnel
À propos du fonctionnement de next () et nextLine ()
À propos de next () et nextLine () de la classe Scanner
[Grails] À propos de la zone de paramétrage et des éléments de paramétrage de application.yml
[Note technique] À propos des avantages et des inconvénients de Ruby
À propos de la description de Docker-compose.yml
Combinaison de recherche et each_with_index
À peu près la même et la même valeur
[Ruby] Questions et vérification du nombre d'arguments de méthode
Pensez aux différences entre les fonctions et les méthodes (en Java)
JSP - À propos du modèle MVC du servlet, de la redirection / transmission et de la portée
[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"
À propos du comportement de ruby Hash # ==
À propos des bases du développement Android
À propos de Biocontainers fastqc et Java
À propos des méthodes equals () et hashcode ()
Ceci et cela de JDK
À propos du rôle de la méthode initialize
À propos de removeAll et de retentionAll de ArrayList
À propos du téléchargement d'images de jsp (servlet)
À propos du niveau de journalisation de java.util.logging.Logger
Qu'est-ce qu'un test? ・ À propos de l'importance d'un test
À propos de la classification et du concept de Immutable / Mutable / Const / Variable de Java et Kotlin.
Pliage et dépliage du contenu de la vue Recycleur
[Introduction à Ruby] À propos du rôle de true et break in the while statement
(Déterminez en 1 minute) Comment utiliser vide?, Vide? Et présent?
À propos de l'affichage initial de Spring Framework
À propos du traitement de BigDecimal (avec réflexion)
À propos de la différence entre irb et pry
À propos du nombre de threads de Completable Future
Vérifiez la version de JDK installée et la version de JDK activée
[Rails / Active Record] À propos de la différence entre créer et créer!
À propos du guide de démarrage officiel de Spring Framework
A propos de l'ordre de description des propriétés système Java
À propos de l'idée des classes anonymes en Java
Comparez la vitesse de l'instruction for et de l'instruction for étendue.
L'histoire de l'introduction de la communication Ajax à Ruby
[Java] La partie déroutante de String et StringBuilder
J'ai comparé les caractéristiques de Java et .NET
Apprenez le mécanisme rudimentaire et l'utilisation de Gradle 4.4
À propos de la synchronisation des appels et des arguments de la méthode addToBackStack
Quels sont les avantages de DI et de Thymeleaf?
Un mémo sur le flux de Rails et Vue
À propos de la méthode
À propos du paquet
ArrayList et le rôle de l'interface vu depuis List
[Ruby] J'ai réfléchi à la différence entre each_with_index et each.with_index
[Rails] J'ai étudié la différence entre les ressources et les ressources
J'ai essayé d'utiliser la fonction Server Push de Servlet 4.0
Veuillez noter la division (division) de java kotlin Int et Int
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
La comparaison d'énumération est ==, et equals est bonne [Java]
À propos de l'utilité des monades dans une perspective orientée objet
Parler des mérites des variables de liaison de base de données ((1) Introduction)