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