[JAVA] Denken Sie an die Kombination von Servlet und Ajax

Apropos Webanwendungen in Java, ich kannte nur das MVC-Modell (Servlet + JSP + Beans). Ich habe kürzlich erfahren, dass es eine Kombination aus ** Servlet + Ajax ** gibt, also nimm sie auf. Die Funktion ist, dass ** Servlet aus Javascript aufgerufen werden kann **.

Kombination von Servlet + JSP + Bohnen

Da dies bekannt ist, wird hier auf eine Erklärung verzichtet.

java7.jpg

Kombination von Servlet + Ajax

java8.jpg

Betrachtet man nur die obige Abbildung, so scheint es keinen großen Unterschied zu geben, aber im Fall von Servlet + Ajax ** wird die Antwort per Javascript empfangen **, sodass der Bildschirm nicht einzeln aktualisiert werden muss.

Verdienst 1

Beispielsweise können Sie indirekt von Javascript über das Servlet auf die Datenbank zugreifen, wie unten gezeigt **. Bei einer großen Datenmenge ist es auch möglich, die Daten in kleinen Mengen aus der DB abzurufen.

java9.jpg

Verdienst 2

Im Vergleich zu JSP sind Vorder- und Rückseite aus folgenden Gründen ** unabhängiger **, was die Entwicklung (in einigen Fällen) erleichtert. Ein Austausch ist möglich, wenn das JSON-Format festgelegt ist.

・ ** Der Anrufer ist grundsätzlich mit HTML + jQuery einverstanden ** → ** Keine Notwendigkeit, Beans oder Klassen auf der Seite zu deklarieren ** ・ ** Exchange ist nur JSON ** ・ ** Bildschirm muss nicht aktualisiert werden ** ・ ** Mehrere Anrufe sind möglich, wie in der folgenden Abbildung gezeigt **

java10.jpg

Anforderer (Javascript)

Sie können synchrone / asynchrone Kommunikation auswählen, beachten Sie jedoch, dass es sich nicht um eine parallele Verarbeitung handelt. Informationen zur parallelen Verarbeitung finden Sie unter Ich habe versucht, Javascript WebWorker zu verwenden. Es scheint, dass Sie die Anforderung JSON selbst als Wert eines Elements wie [Referenz] senden können (http://blog.codebook-10000.com/entry/20130930/1380507089).

``sample.js`



function sampleAjax() {

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

  //Anfrage mit Ajax an Servlet senden
  $.ajax({
    type    : "GET",          //GET / POST
    url     : "http://localhost:8080/SampleWeb/urlServlet",  //Zielservlet-URL (gegebenenfalls ändern)
    data    : request,        //JSON anfordern
    async   : true,           //true:asynchron(Standard), false:Synchronisieren
    success : function(data) {
      //Nachricht empfangen, wenn die Kommunikation erfolgreich ist
      response1 = data["response1"];
      response2 = data["response2"];
    },
    error : function(XMLHttpRequest, textStatus, errorThrown) {
      alert("Während der Anforderung ist ein Fehler aufgetreten:" + textStatus +":\n" + errorThrown);
    }
  });

}

Empfangsanforderung (Servlet)

DB-Aufruf etc. ist ebenfalls möglich.

``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 {

        //Parametererfassung
        String param1 = req.getParameter("param1");
        String param2 = req.getParameter("param2");

        //Verarbeitung (DB-Aufruf usw.)
        String response1 = "";
        String response2 = "";

        //Ausgabe(Speichern Sie die Antwort in der Karte und konvertieren Sie sie in JSON)

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

        //hinzufügen
        mapMsg.put("response1", response1);
        mapMsg.put("response2", response2);

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

        //json string
        String jsonStr = mapper.writeValueAsString(mapMsg);  //list, map

        //Header-Einstellung
        res.setContentType("application/json;charset=UTF-8");   //JSON-Format, UTF-8

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

        //Ausgabe
        pw.print(jsonStr);

        //Schließen
        pw.close();

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

    }

}

ObjectMapper Maven

Fügen Sie pom.xml Folgendes hinzu.

``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

Denken Sie an die Kombination von Servlet und Ajax
Denken Sie an die 7 Regeln von Optional
Informationen zur Funktionsweise von next () und nextLine ()
Informationen zu next () und nextLine () der Scannerklasse
[Grails] Über den Einstellungsbereich und die Einstellungselemente von application.yml
[Technisches Memo] Über die Vor- und Nachteile von Ruby
Informationen zur Beschreibung von Docker-compose.yml
Kombination von Suche und jedem_mit_Index
Ungefähr der gleiche und der gleiche Wert
[Ruby] Fragen und Überprüfung der Anzahl der Methodenargumente
Denken Sie über die Unterschiede zwischen Funktionen und Methoden nach (in Java)
JSP-Informationen zum MVC-Modell des Servlets, zur Umleitung / Weiterleitung und zum Gültigkeitsbereich
[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.
Über das Verhalten von Ruby Hash # ==
Über die Grundlagen der Android-Entwicklung
Über Biocontainer fastqc und Java
Informationen zu den Methoden equals () und hashcode ()
Dies und das von JDK
Informationen zur Rolle der Initialisierungsmethode
Informationen zu removeAll und RetainAll von ArrayList
Über das Hochladen von Bildern von jsp (Servlet)
Informationen zur Protokollebene von java.util.logging.Logger
Was ist ein Test? ・ Über die Wichtigkeit eines Tests
Über die Klassifizierung und das Konzept von Immutable / Mutable / Const / Variable von Java und Kotlin.
Ein- und Ausklappen des Inhalts der Recycler-Ansicht
[Einführung in Ruby] Über die Rolle von true und break in der while-Anweisung
(In 1 Minute bestimmen) Wie verwende ich leer ?, Leer? Und präsent?
Informationen zur ersten Anzeige von Spring Framework
Über die Behandlung von BigDecimal (mit Reflexion)
Über den Unterschied zwischen irb und pry
Über die Anzahl der Threads von Completable Future
Überprüfen Sie die installierte und aktivierte JDK-Version
[Rails / Active Record] Über den Unterschied zwischen create und create!
Über den offiziellen Startleitfaden für Spring Framework
Informationen zur Beschreibungsreihenfolge der Java-Systemeigenschaften
Über die Idee anonymer Klassen in Java
Vergleichen Sie die Geschwindigkeit der for-Anweisung und der erweiterten for-Anweisung.
Die Geschichte der Einführung der Ajax-Kommunikation in Ruby
[Java] Der verwirrende Teil von String und StringBuilder
Ich habe die Eigenschaften von Java und .NET verglichen
Lernen Sie den rudimentären Mechanismus und die Verwendung von Gradle 4.4 kennen
Informationen zum Aufruf-Timing und zu den Argumenten der addToBackStack-Methode
Was sind die Vorteile von DI und Thymeleaf?
Ein Memo über den Fluss von Rails und Vue
Über die Methode
Über das Paket
ArrayList und die Rolle der Schnittstelle aus List
[Ruby] Ich habe über den Unterschied zwischen each_with_index und each.with_index nachgedacht
[Rails] Ich habe den Unterschied zwischen Ressourcen und Ressourcen untersucht
Ich habe versucht, die Server-Push-Funktion von Servlet 4.0 zu verwenden
Bitte beachten Sie die Aufteilung (Aufteilung) von Java Kotlin Int und Int
[Für Anfänger] DI ~ Die Grundlagen von DI und DI im Frühjahr ~
Der Vergleich von enum ist == und gleich ist gut [Java]
Über die Nützlichkeit von Monaden aus einer objektorientierten Perspektive
Über die Vorzüge von Datenbankbindungsvariablen sprechen ((1) Einführung)