Configuration de servlet et déploiement efficace

L'objectif principal de la création d'un backend de page Web est de développer un backend de site Web basé sur la programmation de tomcat, ce qui nécessite définitivement une série d'opérations sur le protocole http. Heureusement, tomcat a déjà encapsulé ces opérations sous-jacentes liées à http (port de surveillance, connexion de réception , lecture de requêtes, analyse de requêtes, construction d'objets de requête, etc.), appelez simplement l'API fournie par Tomcat pour nous. Servlet est l'API native fournie par Tomcat à Java pour le développement Web. Bien sûr, Servlet est rarement utilisé dans les entreprises Voir vous, mais des API de développement web efficaces comme Spring MVC sont également encapsulées à base de servlets. Les technologies émergent à l'infini. Ce n'est qu'en maîtrisant le framework le plus élémentaire que nous pouvons répondre aux changements sans changement. Qu'est-ce qu'un servlet
?

Servlet est une technologie d'implémentation de pages dynamiques, c'est un ensemble d'API fournies par Tomcta aux programmeurs, et c'est une API web qui aide les programmeurs à développer simplement et efficacement.

Pages statiques vs pages dynamiques

  • Page statique : c'est une page dont le contenu est toujours fixe. Même si les utilisateurs sont différents/l'heure est différente/les paramètres de saisie sont différents , le contenu de la page ne changera pas.
  • Pages dynamiques : le contenu de la page changera en fonction des paramètres utilisateur/heure/saisie .

Par exemple:

La page d'accueil de Tomcat est une page statique

image-20230413144257055

La page d'accueil de la station B est une page dynamique

image-20230424104712354

Il existe de nombreuses technologies pour créer des pages dynamiques, et chaque langage aura des bibliothèques/frameworks associés pour le faire

Servlet est un ensemble d'API fournies par Tomcat, le serveur HTTP, à Java pour compléter la tâche de création de pages dynamiques, sans avoir à prêter attention aux détails techniques tels que Socket, format de protocole Http, concurrence multithread, etc., qui réduit le seuil de développement d'applications Web et améliore l'efficacité du développement.

Travail principal du servlet

  • Permet aux programmeurs d'enregistrer une classe et d'exécuter du code dans cette classe lorsque Tomcat reçoit une requête HTTP spécifique.
  • Aidez les programmeurs à analyser les requêtes HTTP, à analyser les requêtes HTTP d'une chaîne dans un objet HttpRequest
  • Pour aider les programmeurs à construire des réponses Http, les programmeurs n'ont qu'à remplir certains champs d'attribut pour l'objet HttpResponse spécifié, et le Servlet construira automatiquement une chaîne de réponse Http selon le protocole Http, et l'écrira au client via le Socket.

Le premier programme de servlet

La première étape consiste à écrire un programme de servlet, à le déployer sur Tomcat, à y accéder via le serveur et à obtenir la chaîne hello world. Ce hello world peut être appelé le hello world le plus difficile de l'histoire.

Il y a sept étapes au total, à l'exception de l'écriture du code hello world, le reste des étapes est fixe.

  1. créer un projet
  2. Introduire des dépendances
  3. Créer une structure de répertoire
  4. Écrire du code
  5. emballeur
  6. Programme de déploiement
  7. vérifier

1. Créer un projet

Ici nous voulons créer un projet maven, maven est un outil de "gestion de projet".

Les fonctions principales sont :

  1. Standardiser la structure des répertoires
  2. Gérer les dépendances (quelles bibliothèques tierces sont utilisées, toutes bien gérées)
  3. Construction
  4. Paquet
  5. test

image-20230405163516003

Choisissez simplement en fonction de l'image ci-dessus ~~

Si vous utilisez maven pour la première fois, après la création du projet, certaines dépendances maven seront chargées à partir de l'entrepôt central, et vous devez être connecté à Internet et attendre patiemment. Cela ne se produira que pour la première fois, et les suivantes la création sera pratique.

Bien que maven soit un projet indépendant, il n'a pas besoin d'être téléchargé séparément, car IDEA est déjà fourni avec.

Notez le répertoire du projet créé :

image-20230405164234160

2. Introduire des dépendances

La dépendance du package jar de la servlet

[Maven仓库]( Référentiel Maven : Rechercher/Parcourir/Explorer (mvnrepository.com) )

Rechercher un servlet

image-20230405164628386

Correspondant au numéro de version de Tomcat 8, nous devons télécharger 3.1.0

image-20230405164752119

Collez simplement le code ci-dessous dans pom.xml.

image-20230405164847451

Conseils : Ici, il ne s'agit pas de coller par hasard, mais de créer une sous-étiquette et de la coller dans la sous-étiquette.

image-20230405165125246

Si vous utilisez la dépendance pour la première fois, elle peut être rouge (rouge signifie que le téléchargement n'est pas terminé). Généralement, tant que vous la collez, le maven de l'idée la téléchargera automatiquement dans l'entrepôt maven. configuration est équivalente aux coordonnées de la dépendance dans l'entrepôt maven.


3. Créez un répertoire

  1. Sous le répertoire principal (similaire à java, resources), créez un répertoire webapp.
  2. Créer un répertoire WEB-INF sous webapp
  3. Créez un fichier web.xml dans le répertoire WEB-INF

image-20230405165650188

Conseils : Le répertoire et la structure créés ici ne peuvent pas être erronés du tout.

Écrivez du code dans web.xml

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>

Il n'est pas nécessaire de mémoriser le code ci-dessus. Par rapport au code écrit dans le passé, le programme de servlet actuel présente une très grande différence, c'est-à-dire qu'il n'y a pas de méthode principale. La méthode principale peut être considérée comme le moteur de la voiture. . Ce n'est qu'avec le moteur qu'il peut fonctionner. Mais le véhicule actuel n'a pas de moteur , afin de faire fonctionner la voiture, vous pouvez accrocher un avant et laisser l'avant traîner et tourner. Le programme de servlet que nous avons écrit est le chariot, et tomcat est l'avant. Nous plaçons le programme de servlet écrit dans le répertoire webapps, ce qui équivaut à accrocher le chariot. Après avoir atteint l'avant de la voiture, WEB-INF/web.xml doit dire à tomcat quelles voitures (fichiers) doivent être tiré.

4. Écrire du code

Créez un fichier .java sous le répertoire java pour écrire du code

image-20230405170745598

La classe prête à l'emploi fournie dans l'API du servlet doit hériter de HttpServlet pour écrire le code du servlet. L'objectif principal de l'héritage ici est d'étendre la fonction de HttpServlet via la réécriture de méthode.

public class HelloServlet extends HttpServlet 

Remplacez la méthode doGet, il y a déjà doGet dans la classe parent, ici nous espérons remplacer la classe parent par la version de la sous-classe.

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
//        super.doGet(req, resp);这段代码一定要去掉,父类只会返回一个错误页面

    }

La méthode doGet que nous avons écrite n'a pas besoin d'être appelée manuellement, mais est appelée par Tomcat. Lorsque Tomcat reçoit la requête get, il déclenchera la méthode doGet. Tomcat construira deux paramètres, req (demande) et resp (réponse).

  • req : la chaîne lue à partir du socket TCP, l'objet analysé conformément au protocole HTTP et les attributs de l'objet correspondent au format du message de requête HTTP.
  • resp : est un objet vide (non nul, juste un nouvel objet, les différentes propriétés à l'intérieur ne sont pas définies), les programmeurs doivent construire un objet resp selon req dans doGet, combiné avec leur propre logique métier . est de calculer la réponse en fonction de la requête , et le paramètre resp est essentiellement un "paramètre de sortie". Une fois le paramètre construit dans la méthode, l'appelant écrit le résultat sur le socket TCP et le renvoie au navigateur.

Écrivez le code :

//        这个仅仅是在服务器的控制台打印
        System.out.println("hello world");
//        要想把 hello world 返回到客户端 , 需要以下代码
//        getWriter 会得到一个 writer 对象
        resp.getWriter().write("hello world");

L'objet Writer ici est subordonné à l'objet resp. L'opération d'écriture consiste en fait à écrire dans la partie du corps du resp. Une fois l'objet resp construit, tomcat convertira uniformément le numéro de réponse en http, puis l'écrira dans le socket .

Enfin, faites attention à ajouter des annotations à la partie la plus externe de la classe

@WebServlet("/hello")

La fonction de l'annotation est de fournir une "explication" supplémentaire pour une classe/méthode, en donnant à la classe/méthode des fonctions/significations supplémentaires.

L'annotation @WebServlet ici est utilisée pour associer la classe actuelle à un chemin de requête http.

doGet est appelé lorsque Tomcat reçoit une requête Get. L'appel de doGet dépend du chemin de la requête Get en cours. Différents chemins peuvent déclencher différents codes (associés à différentes classes). Dans un programme Servlet , il peut y avoir plusieurs classes Servlet, et chaque classe de servlet peut être associée à différents chemins (correspondant à différentes ressources), de sorte que plusieurs servlets peuvent implémenter différentes fonctions.

Exemple : Je vais au restaurant pour un wrap au poulet

J'initie une demande : Patron, viens ici. Rouleaux de poulet~~http://ip:port/rouleaux de poulet ? Oignons verts = mettre plus

Une fois que le patron aura reçu la demande, il cuisinera selon le processus de "fabrication de rouleaux de poulet" (calculez la réponse en fonction de la demande)

Si j'ai deux autres demandes :

5. Emballeur

Une fois le programme compilé (obtenez des fichiers .class), compressez ces fichiers .class dans un package compressé

jar est une sorte de package compressé composé de .class, mais voici le package war, jar est juste un programme java ordinaire, et war est un programme spécifique à tomcat utilisé pour décrire webapp, une guerre est une webapp.

Cliquez sur le paquet avec maven

image-20230406090336409

À l'heure actuelle, le package n'est qu'un package jar, et il doit être conditionné en tant que package war s'il doit être déployé sur tomcat.

<packaging>war</packaging>

Il est nécessaire d'ajouter un plug-in pour faire un package war, sinon une erreur sera signalée. Il n'est pas nécessaire d'ajouter un package jar, et finalName consiste à renommer le package war.

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.1</version>
            </plugin>
        </plugins>
        <finalName>hello_servlet</finalName>
    </build>

Une fois l'empaquetage réussi, il y aura un autre paquet war dans le répertoire cible.

image-20230406091318610

L'IDE peut évidemment s'exécuter directement, pourquoi devons-nous passer par un conditionnement aussi gênant ?

Étant donné que l'IDE s'exécute directement localement, l'environnement de développement (l'ordinateur sur lequel vous écrivez votre propre code) et l'environnement d'exécution (un autre serveur) peuvent ne pas être le même environnement pendant le travail.

6. Déploiement

Copiez le war empaqueté dans le répertoire webapps de tomcat, puis démarrez tomcat.

image-20230406091659601

7. Vérifiez

Ouvrez le navigateur, entrez l'url et accédez au code écrit.

Conseils : Le nom du chemin doit être correct.

image-20230406092240957

résumé:

Entrez l'URL dans la barre d'adresse du navigateur, et le navigateur construira une requête http Get correspondante et l'enverra à tomcat. Tomcat déterminera l'application Web spécifique en fonction du chemin de premier niveau. Selon le chemin de second niveau, déterminez quelle classe est appelée, et enfin déterminer quelle méthode (doGet, doPost...) appeler HelloServlet via la méthode Get/Post

bref:

Le serveur Http est également un serveur basé sur TCP, créant un port de liaison de socket de serveur TCP, accepte de recevoir la demande, après réception de la demande, lit la demande du socket, construit la demande reçue dans un objet HttpServletRquest, puis classe selon à l'URL dans le Path de la requête, pour déterminer une classe Servlet (un hash construit au préalable dans le serveur Http pour sauvegarder le chemin et la classe), créer une instance Servlet correspondante, déterminer la méthode de la classe Servlet selon la méthode http , récupérez l'objet HttpServletResponse après l'exécution de la méthode et construisez HTTP selon le protocole http Response (get string), réécrivez simplement dans le socket.


Déploiement efficace des plugins Tomcat :

Certaines des opérations ci-dessus peuvent être simplifiées, par exemple : il existe des modèles de projet pour la création de projets et des plug-ins fixes pour l'empaquetage et le déploiement.

Par conséquent, IDEA fournit des API qui permettent aux programmeurs de développer des plug-ins et d'étendre les fonctions existantes d'IDEA.

1. Les plug-ins courants pour l'empaquetage et le déploiement de projets incluent Smart Tomcat (plus facile et plus facile à utiliser)

image-20230407105330812

2. Après avoir téléchargé le plug-in, vous devez le configurer lorsque vous utilisez SmartTomcat pour la première fois, cliquez sur Modifier la configuration

image-20230407105558693

3. Ajouter ajouter SmartTomcat

image-20230407105639838

5. Configurez le chemin de contexte de Tomcat et ignorez le reste.

Conseils : Ne commencez pas le chemin du contexte par une lettre majuscule, car le navigateur convertira le chemin du contexte en minuscules par défaut, ce qui empêchera d'accéder correctement à la page.

Smart Tomcat charge une seule application Web à exécuter, et ce n'est pas avec le tomcat local. L'idée appelle tomcat, ce qui obligera tomcat à charger le répertoire du projet en cours. Le chemin de contexte par défaut est le nom du projet. Si le nom du projet commence par une lettre majuscule, vous pouvez la modifier. Ce processus n'inclut pas de package war. Il n'y a pas de processus de copie et de décompression, mais certains contenus sous les applications Web (visitez 127.0.0.1:8080 pour afficher la page d'accueil) ont disparu.

image-20230407111244936

6. Lancez simplement Tomcat

7. Comme le montre la figure ci-dessous, l'opération est réussie :

Conseils : Ne cliquez pas sur le lien dans l'idée, il doit être 404, car le chemin de la servlet n'est pas inclus.

image-20230407111201952

8. Visitez la page Web

image-20230407111142810

Erreurs courantes:

Un 404 apparaît :
  1. mauvais chemin
  2. l'application web n'est pas déployée correctement
  3. web.xml est mal écrit
  4. Écrire moins de chemin de servlet
  5. Le chemin du servlet ne correspond pas à l'URL
405 apparaît

Conseils : Assurez-vous de commenter la méthode super.doGet de la classe parent, car la classe parent renvoie une page d'erreur 405 par défaut.

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        String protocol = req.getProtocol();
        String msg = lStrings.getString("http.method_get_not_supported");
        if (protocol.endsWith("1.1")) {
    
    
            resp.sendError(405, msg);
        } else {
    
    
            resp.sendError(400, msg);
        }

    }
500 apparaît :

Essentiellement, le code signale une erreur et le journal vous indiquera clairement quelle ligne de code dans la pile des appels d'exception est erronée.

Une "page vierge" apparaît :

resp.getWriter.write() n'est pas écrit dans le code

"Ce site Web est inaccessible" s'affiche

Tomcat n'est pas démarré, vérifiez si tomcat est bien démarré, vérifiez le répertoire pour toute anomalie, généralement des conflits de port.


Je suppose que tu aimes

Origine blog.csdn.net/liu_xuixui/article/details/130337893
conseillé
Classement