[JAVA] Un exemple simple du modèle MVC

Fondamentalement, il suit le programme de calcul de l'IMC ** du chapitre 7 de l'introduction à Servlet & jsp qui peut être clairement compris.

Qu'est-ce qu'un modèle MVC?

élément rôle Fichier
Model Effectue le traitement principal de l'application et le stockage des données Classe générale
View Afficher l'écran à l'utilisateur Fichier JSP
Controller Reçoit une demande de l'utilisateur, demande au modèle d'exécuter le processus et demande à la vue d'afficher le résultat. Classe de servlet

javaBeams L'un des domaines où les instances peuvent être stockées. Il existe les règles suivantes.

  1. Peut être sérialisé
  2. La classe est publique et appartient au package
  3. Possède un constructeur public sans argument
  4. Le champ est encapsulé
  5. Avoir un getter / setter qui respecte la convention de dénomination

Exemple de programme

Je mettrai un commentaire pour chaque code à tout moment.

Model Effectue le traitement principal de l'application et le stockage des données Enregistré dans le package modèle.

Health.java


package model;

import java.io.Serializable;

public class Health implements Serializable {
  private double height, weight, bmi;
  private String bodyType;

  public double getHeight() {
    return height;
  }

  public void setHeight(Double height) {
    this.height = height;
  }

  public double getWeight() {
    return weight;
  }

  public void setWeight(Double weight) {
    this.weight = weight;
  }

  public void setBmi(Double bmi) {
    this.bmi = bmi;
  }

  public double getBmi() {
    return this.bmi;
  }

  public void setBodyType(String bodyType) {
    this.bodyType = bodyType;
  }

  public String getBodyType() {
    return this.bodyType;
  }
}

Ce code est ce qu'on appelle les JavaBeans.

HealthCheckLogic.java


package model;

public class HealthCheckLogic {
  public void execute(Health health) {
    //Calculer et définir l'IMC
    double weight = health.getWeight();
    double height = health.getHeight();
    double bmi = weight / (height / 100.0 * height / 100.0);
    health.setBmi(bmi);

    //Défini en jugeant le physique à partir de l'indice IMC
    String bodyType;
    if (bmi < 18.5) {
      bodyType = "Type maigre";
    } else if (bmi < 25) {
      bodyType = "d'habitude";
    } else {
      bodyType = "obésité";
    }
    health.setBodyType(bodyType);
  }
}

Rien à écrire en particulier.

Controller Il reçoit une demande de l'utilisateur, demande au modèle d'exécuter le processus et demande à la vue d'afficher le résultat. Enregistré dans le package de servlet.

HealthCheck.java


package servlet;

import java.io.IOException;

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

import model.Health;
import model.HealthCheckLogic;

@WebServlet("/HealthCheck")
public class HealthCheck extends HttpServlet {
  private static final long serialVersionUID = 1L;

  protected void doGet(HttpServletRequest request,
      HttpServletResponse response)
      throws ServletException, IOException {

    //vers l'avant
    RequestDispatcher dispatcher =
        request.getRequestDispatcher
            ("/WEB-INF/jsp/healthCheck.jsp");
    dispatcher.forward(request, response);
  }

  protected void doPost(HttpServletRequest request,
      HttpServletResponse response)
      throws ServletException, IOException {

    //Obtenir les paramètres de la demande
    String weight = request.getParameter("weight"); //la taille
    String height = request.getParameter("height"); //poids

    //Définir la valeur d'entrée sur la propriété
    Health health = new Health();
    health.setHeight(Double.parseDouble(height));
    health.setWeight(Double.parseDouble(weight));
    //Effectuer une vérification de l'état et définir les résultats
    HealthCheckLogic healthCheckLogic = new HealthCheckLogic();
    healthCheckLogic.execute(health);

    //Enregistrer pour demander l'étendue
    request.setAttribute("health", health);

    //vers l'avant
    RequestDispatcher dispatcher =
        request.getRequestDispatcher
            ("/WEB-INF/jsp/healthCheckResult.jsp");
    dispatcher.forward(request, response);
  }
}

Modèle d'URL

Décrit dans @WebServlet (" / HealthCheck ").

serialVersionUID private static final long serialVersionUID = 1L; se sent comme une sorte de magie, mais c'est différent. Obligatoire en cas de sérialisation, c'est-à-dire lors de l'importation de java.io.Serializable. Utilisé comme contrôle de version pour la classe Serializable.

Demande de portée

La portée générée pour chaque demande. Il devient possible de partager une instance entre la destination de transfert et la source de transfert.

request.setAttribute("Nom d'attribut",exemple)

Spécifiez le nom de gestion de l'instance à enregistrer dans l'étendue dans ** Nom d'attribut **. Spécifiez l'instance à enregistrer dans ** instance **

Lors de l'acquisition d'une instance à partir de l'étendue de la requête, décrivez comme suit. Cette fois, healthCheckResult.jsp est utilisé pour ce processus.

Saisissez le nom de l'instance à obtenir= (Type d'instance à obtenir)request.getAttribute("Nom d'attribut")

Notez qu'une distribution est requise

vers l'avant

En utilisant forward, il est possible de déplacer le traitement vers une autre classe de servlet ou un autre fichier JSP.

RequestDispatcher dispatcher =
request.getRequestDispatcher
    ("Destination de transfert");
dispatcher.forward(request, response);

Comment spécifier la destination de transfert Fichier JSP → / Chemin depuis WebContent Classe de servlet → / modèle d'URL

View Affichez l'écran à l'utilisateur. Ici, enregistrez dans / WebContent / Web-INF / jsp.

healthCheck.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Vérification de l'état rafraîchissante</title>
</head>
<body>
<h1>Vérification de l'état rafraîchissante</h1>
<form action="/example/HealthCheck" method="post">
la taille:<input type="text" name="height">(cm)<br>
poids:<input type="text" name="weight">(kg)<br>
<input type="submit" value="Diagnostic">
</form>
</body>
</html>

Ligne 10 `<form action =" / exemple / HealthCheck "method =" post "> ʻL'attribut action est spécifié comme suit. Pour la classe de servlet → / nom de l'application / modèle d'URL Pour les fichiers JSP → / Nom de l'application / Chemin de WebContent

healthCheckResult.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="model.Health" %>
<%
//Obtenir la santé stockée dans la portée de la demande
Health health = (Health) request.getAttribute("health");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Vérification de l'état rafraîchissante</title>
</head>
<body>
<h1>Actualisation des résultats de la vérification de l'état</h1>
<p>
la taille:<%= health.getHeight() %><br>
poids:<%= health.getWeight() %><br>
BMI:<%= health.getBmi() %><br>
Physique:<%= health.getBodyType() %>
</p>
<a href="/example/HealthCheck">Revenir</a>
</body>
</html>

La deuxième ligne, <% @ page import =" model.Health "%>, appelle Health.class dans le package de modèle. Ce code peut être un excellent moyen de comprendre comment utiliser javaBeans.

finalement

Veuillez vous référer à ** Introduction à Servlet & JSP qui est rafraîchissante ** (écrite par Daigo Kunimoto). Le droit d'auteur du code source de cet article appartient à Flarelink Co., Ltd. J'utilise Creative Commons BY-SA 4.0 en conséquence.

Recommended Posts

Un exemple simple du modèle MVC
Un exemple simple de servlet qui affiche le japonais
[Note] Résumé simple du modèle MVC
Modèle MVC
Un exemple d'erreur FactoryBot [KeyError: Factory not registered: "user"]
[Modèle MVC] Un mémo qu'un débutant a appris MVC
Un simple échantillon d'ArBiMap (carte bidirectionnelle)
Coincé devant le forgeron par enum
Une collection de questions simples pour les débutants Java
Créer un service avec un modèle vide Liferay 7.0 / DXP
[Signification du modèle: de form_with]
Exemple d'utilisation de vue.config.js
Qu'est-ce qu'un modèle MVC?
Fait le côté serveur du jeu de cartes en ligne ⑤
J'ai créé le côté serveur du jeu de cartes en ligne ③
J'ai créé le côté serveur du jeu de cartes en ligne ⑥
Je souhaite créer un modèle spécifique d'ActiveRecord ReadOnly
J'ai créé le côté serveur du jeu de cartes en ligne ④
J'ai créé le côté serveur du jeu de cartes en ligne ②
Obtenons la représentation interne d'un nombre à virgule flottante
JSP - À propos du modèle MVC du servlet, de la redirection / transmission et de la portée
J'ai créé un système d'exemple MVC simple à l'aide de Spring Boot
Les enregistrements existants disparaissent lors de la construction du modèle has_one (rails)