[JAVA] [Eclipse / Tomcat] Servlet + JSP dans le projet webapp de Maven

Auparavant, j'ai créé un projet d'application Web avec "Projet Tomcat" dans Créer une application de mémo avec Tomcat + JSP + Servlet + MySQL en utilisant Eclipse. Je l'ai fait parce qu'il est préférable de sélectionner maven-archetype-webapp comme archétype dans le projet Maven et de créer le projet.

Référence: Exportation de projets et de fichiers war lors de la création de Java côté serveur avec Eclipse

Paramètres du projet

création de projet maven-archetype-webapp

Sélectionnez "Projet Maven"

image.png

Décochez "Créer un projet simple (S)" __ "Suivant"

image.png

Sélectionnez "maven-archtype-webapp" comme architype

image.png

image.png

Structure du répertoire

Etat initial

image.png

Dans la configuration du projet immédiatement après la création, src / main / java et src / test / java du répertoire du fichier source sont manquants, il est donc créé manuellement à partir du dossier du nouveau menu de création ou de l'Explorateur, etc. Faire.

image.png

(Ce n'est pas affiché comme une erreur pour une raison quelconque)

Paramètre de version Java

Si vous créez un projet Maven dans Eclipse, ce sera le paramètre Java 1.5. ..

Bibliothèque système

Puisque "JRE System Library" est "J2SE-1.5", sélectionnez "JavaSE-1.8 (java8)" dans les propriétés du clic droit.

image.png

Facette du projet

Ensuite, j'obtiens l'erreur "Ne correspond pas à la version des facettes du projet Java"

image.png

Ouvrez les propriétés du projet et définissez la version sur 1.8 à partir de "Project Facet"

image.png

Version du compilateur Maven

Spécifiez la version du compilateur lors de l'exécution de maven build séparément de la version JDK dans Eclipse.

image.png

Ce qui suit est décrit directement sous ` '' de l'élément racine. (Vous pouvez le saisir à la main)

pom.xml


 <properties>
  <java.version>1.8</java.version>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
 </properties>

Sans cela, par exemple, le code source utilisant des collections entraînera une erreur car la version 1.5 du compilateur ne le prend pas en charge.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.395 s
[INFO] Finished at: 2018-12-23T16:03:11+09:00
[INFO] Final Memory: 9M/245M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project memoapp2: Compilation failure
[ERROR] /C:/Users/zaki/src/java-study/memoapp2/src/main/java/jp/example/www/MainServlet.java:[30,51]Opérateur diamant-source 1.Non pris en charge dans 5
[ERROR](Pour activer l'opérateur diamant-Veuillez utiliser la source 7 ou ultérieure)
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

Inclure le jar Servlet dans Maven

J'obtiens l'erreur (depuis le début) que la superclasse "javax.servlet.http.HttpServlet" n'a pas été trouvée dans le chemin de construction Java, car les bibliothèques liées aux servlets ne sont pas référencées dans le projet.

Réglez à l'aide de Maven.

Le fichier jar de l 'API Java Servlet est défini. Pour incorporer la dernière API Java Servlet 4.0.1 à partir de décembre 2018 à partir du lien, l'onglet Maven Copiez le contenu du XML affiché dans la partie <dependencies> ~ </ dependencies> de pom.xml

image.png

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

Copiez et collez ce contenu dans le fichier pom.xml du projet

image.png

Désormais, lorsque vous enregistrez le fichier, la servo-api sera automatiquement téléchargée et intégrée à votre projet en fonction du contenu du fichier.

Si le processus se termine avec succès, l'erreur indiquant que HttpServlet n'est pas trouvée dans le chemin de construction sera résolue.

Affichage de JSP

À ce stade, sélectionnez Tomcat dans «Exécuter» -> «Exécuter sur le serveur» dans le menu contextuel du projet, assurez-vous que les ressources configurées sur le serveur incluent le projet cible, puis exécutez-le. Le contenu de ʻindex.jsp` inclus lors de la création du projet peut être affiché sur le navigateur.

image.png

image.png

image.png

Cependant, il n'est pas préférable de configurer le fichier jsp dans un emplacement accessible directement depuis le navigateur, alors déplacez-vous vers n'importe quel chemin sous src / main / webapp / WEB-INF (tel que WEB-INF / jsp) et directement Rendez-le inaccessible et affichez-le via un servlet.

Créer et afficher un servlet

Depuis "Servlet" dans le nouveau menu.

image.png

image.png

Après avoir entré le nom du package et le nom de la classe, vous pouvez également entrer des méta-informations.

image.png

Choisir la méthode à remplacer

image.png

La valeur des méta-informations saisies ici est également reflétée dans src / main / webapp / WEB-INF / web.xml

web.xml(valeur initiale)


<!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>

web.xml(Après l'addition)


<!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>
  <servlet>
  	<servlet-name>MainServlet</servlet-name>
  	<display-name>MainServlet</display-name>
  	<description>Écran principal</description>
  	<servlet-class>jp.example.www.MainServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>MainServlet</servlet-name>
  	<url-pattern>/MainServlet</url-pattern>
  </servlet-mapping>
</web-app>

La source du servlet est créée avec la méthode spécifiée remplacée.

package jp.example.www;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class MainServlet
 */
public class MainServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public MainServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("webapp-maven! Served at: ").append(request.getContextPath());
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

Même dans l'état immédiatement après la création, si vous démarrez (ou redémarrez) Tomcat avec "Run (R)" -> "Run on server", il sera exécuté avec le contenu du code généré automatiquement.

image.png

Appel de JSP depuis un servlet

[Pour le projet Tomcat](https://qiita.com/zaki-lknr/items/32690b071abf202281d6#%E3%83%A1%E3%82%A4%E3%83%B3%E7%94%BB%E9% 9D% A2% E3% 81% AEui% E3% 81% A8% E5% 87% A6% E7% 90% 86% E9% 83% A8% E5% 88% 86% E3% 82% 92% E4% BD% Identique à 9C% E6% 88% 90% E3% 81% 99% E3% 82% 8B).

Pour le fichier jsp de / WEB-INF / jsp / main.jsp, il sera affiché si vous écrivez ce qui suit avec doGet () du servlet.

        String path = "/WEB-INF/jsp/main.jsp";
        RequestDispatcher dispatcher = request.getRequestDispatcher(path);
        dispatcher.forward(request, response);

fichiers d'installation et de guerre maven

En exécutant "Run (R)" -> "Maven install", un fichier war est généré directement sous le répertoire target.

image.png

Exécutez "Maven clean" pour effacer tous les résultats de compilation

Créer un fichier war par exportation

Vous pouvez également créer un fichier war en sélectionnant "Exporter" dans le menu projet.

image.png

Dans ce cas, il peut être créé indépendamment de Maven et peut être généré vers n'importe quel chemin.

Recommended Posts

[Eclipse / Tomcat] Servlet + JSP dans le projet webapp de Maven
À propos de [servlet] [JSP] [tomcat]
Présentez Maven au projet Tomcat
Installez le plug-in Tomcat dans Eclipse
Créer un projet Tomcat en utilisant Eclipse Pleiades All in One
Créer un projet Tomcat à l'aide d'Eclipse
Créer un programme Servlet dans Eclipse
Ajout de slf4J + logback au projet Eclipse Maven
Problème de configuration Maven avec Spring pom.xml dans Eclipse
Projet CI pour Maven dans Azure Pipelines
Exécutez JUnit et Spock dans un projet maven
Lorsque le projet n'est pas affiché dans eclipse
JSP sur Tomcat
MVC dans Eclipse.
Créer un servlet Java et un fichier WAR JSP à déployer sur Apache Tomcat 9 avec Gradle
La bonne façon de voir la source Tomcat dans Eclipse
Comment basculer Tomcat context.xml avec Eclipse WTP