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 **.
Da dies bekannt ist, wird hier auf eine Erklärung verzichtet.
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.
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.
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 **
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).
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);
}
});
}
DB-Aufruf etc. ist ebenfalls möglich.
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();
}
}
}
Fügen Sie pom.xml Folgendes hinzu.
<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