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 **.
Puisqu'il est familier, l'explication est omise ici.
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.
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.
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 **
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.
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);
}
});
}
L'appel DB, etc. est également possible.
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();
}
}
}
Ajoutez ce qui suit à 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