333 votes

Comment importer l'API javax.servlet / jakarta.servlet dans mon projet Eclipse ?

Je veux développer avec des Servlets dans Eclipse, mais il est dit que le paquet javax.servlet / jakarta.servlet ne peut être résolu. Comment puis-je ajouter javax.servlet / jakarta.servlet à mon projet Eclipse ?

0 votes

J'essaie d'exécuter un simple servlet de type hello word, normalement si je voulais faire un gui, j'importerais java......swing.* ; je ne trouve pas le bon import pour un servlet.

429voto

BalusC Points 498232

Assurez-vous que vous avez la bonne version d'Eclipse et du serveur.

Assurez-vous que vous utilisez au moins IDE Eclipse pour Entreprise Développeurs Java (avec le Entreprise ). Il contient des outils de développement permettant de créer des projets Web dynamiques et d'intégrer facilement des conteneurs de servlets (ces outils font partie de la Web Tools Platform, WTP). Si vous disposiez déjà d'Eclipse IDE for Java (sans Enterprise) et que vous avez installé manuellement certains plugins connexes, il y a de fortes chances que cela n'ait pas été fait correctement. Vous feriez mieux de le jeter et de prendre le véritable Eclipse IDE for Enterprise Java.

Vous devez également vous assurer que vous avez déjà installé sur votre machine un servletcontainer qui met en œuvre au moins la même version de l'API Servlet que le servletcontainer de l'environnement de production, par exemple Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly etc. En général, il suffit de télécharger le fichier ZIP et de l'extraire. Dans le cas de Tomcat, faites no télécharger le format EXE, c'est uniquement pour les environnements de production basés sur Windows. Voir aussi a.o. Plusieurs ports (8005, 8080, 8009) requis par le serveur Tomcat sur localhost sont déjà utilisés. .

Un servletcontainer est une implémentation concrète de l'API Servlet. Notez que le Java EE SDK téléchargeable sur Oracle.com contient essentiellement GlassFish. Donc, si vous avez déjà téléchargé Java EE SDK, vous avez déjà GlassFish. Notez également que par exemple GlassFish et JBoss AS/WildFly sont plus que de simples conteneurs de services, ils prennent également en charge JSF, EJB, JPA et toutes les autres fantaisies de Java EE. Voir aussi a.o. Qu'est-ce que Java EE exactement ?

Assurez-vous que vous utilisez le bon paquetage de servlets.

El javax.* a été renommé en jakarta.* depuis la version 5.0 de l'API Servlet qui fait partie de Jakarta EE 9 (Tomcat 10, TomEE 9, WildFly 22 Preview, GlassFish 6, Payara 6, Liberty 22, etc). Donc, si vous visez ces versions de serveur ou des versions plus récentes, vous devez remplacer

import javax.servlet.*;
import javax.servlet.http.*;

par

import jakarta.servlet.*;
import jakarta.servlet.http.*;

pour qu'il compile, sinon vous risquez d'être confronté à cette erreur de compilation

La superclasse "javax.servlet.http.HttpServlet" n'a pas été trouvée dans le chemin de construction de Java.

Intégrer le serveur dans Eclipse et l'associer au projet

Après avoir installé à la fois Eclipse for Enterprise Java et un servletcontainer sur votre machine, effectuez les étapes suivantes dans Eclipse :

  1. Intégrer servletcontainer dans Eclipse

    a. Via la vue des serveurs

    • Ouvrez le Serveurs dans la case du bas.

    • Cliquez-y avec le bouton droit de la souris et choisissez Nouveau > Serveur .

    • Choisissez la marque et la version appropriées de servletcontainer et suivez l'assistant.

      enter image description here

    b. Ou, via les préférences d'Eclipse

    • Ouvrir Fenêtre > Préférences > Serveur > Environnements d'exécution .

    • Puedes Ajouter , Editar y Retirer serveurs ici.

      enter image description here

  2. Associer le serveur au projet

    a. Dans le nouveau projet

    • Ouvrez le Navigateur/explorateur de projet sur le côté gauche.

    • Cliquez-y avec le bouton droit de la souris et choisissez Nouveau > Projet et ensuite dans le menu Web > Projet Web dynamique .

    • Dans l'assistant, définissez le Durée d'exécution de la cible au serveur intégré.

      enter image description here

    b. Ou, dans un projet existant

    • Cliquez avec le bouton droit de la souris sur le projet et choisissez Propriétés .

    • Sur Runtimes ciblés sélectionnez le serveur intégré.

      enter image description here

    Dans tous les cas, Eclipse prendra automatiquement les bibliothèques de servletcontainer dans le chemin de construction. Ainsi, vous pourrez importer et utiliser l'API Servlet.

Ne jamais transporter des fichiers JAR spécifiques au serveur

En tout état de cause, vous ne devriez pas avoir besoin de bricoler dans les Chemin de construction propriété du projet. Vous devez avant tout jamais copier/télécharger/déplacer/inclure manuellement les bibliothèques individuelles spécifiques à servletcontainer comme servlet-api.jar , jsp-api.jar , el-api.jar , j2ee.jar , javaee.jar etc. Cela ne ferait qu'entraîner des problèmes de portabilité, de compatibilité, de classpath et de maintenabilité, car votre application web ne fonctionnerait pas si elle était déployée dans un servletcontainer d'une marque/version différente de celle d'où proviennent ces bibliothèques.

Si vous utilisez Maven, vous devez absolument vous assurer que les bibliothèques spécifiques à servletcontainer qui sont déjà fournies par le runtime cible sont marquées comme <scope>provided</scope> . Vous pouvez trouver des exemples de pom.xml déclarations de dépendance pour Tomcat 10+, Tomcat 9-, JEE 9+ et JEE 8- dans cette réponse : Tomcat 9 coule les servlets vers javax.servlet.Servlet au lieu de jakarta.servlet.http.HttpServlet

Voici quelques exemples d'exceptions typiques que vous pouvez obtenir lorsque vous allumez le /WEB-INF/lib ou même /JRE/lib , /JRE/lib/ext etc. avec des bibliothèques spécifiques à servletcontainer dans une tentative négligente de corriger les erreurs de compilation :

4 votes

@BalusC Si j'utilise Apache Ant pour construire mon projet, comment puis-je inclure dynamiquement le dossier /lib(servlet-api.jar & jsp-api.jar) du conteneur de servlets ? Ou dois-je coder en dur le chemin d'accès au dossier /lib, comme suit <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/> etc.

1 votes

@BalusC pourquoi les projets maven sont créés avec l'archétype maven-archetype-webapp ne pas inclure le JAR servlet-api comme dépendance ? Le projet a un index.jsp avec une erreur de compilation. (Eclipse Luna Build id : 20140612-0600, JDK 8, M2eclipse)

1 votes

@arun servlet-api Les dépendances sont fournies par les environnements d'exécution des servlets comme Tomcat, Wildfly, Glassfish, etc. Ne les incluez jamais dans votre application, car il y a de fortes chances qu'elles entrent en conflit avec celles de l'environnement.

224voto

Prayag Upd Points 3347

import javax.servlet

ÉTAPE 1

Aller à propriétés de votre projet ( avec Alt + Enter ou righ-click )

ÉTAPE 2

vérifier Apache Tomcat v7.0 sous Temps d'exécution ciblé et ça marche.

2 votes

Il m'a aidé à ajouter mon runtime JBOSS. Ma liste était vide.

2 votes

C'était la solution pour moi. J'avais défini tomcat 6.0 comme environnement de déploiement (en tant que serveur dans eclipse), mais j'ai négligé de le spécifier comme environnement d'exécution... Je suppose que cela signifie qu'il pouvait trouver les .jars dans mon dossier tomcat/lib au moment de l'exécution, mais pas au moment de la compilation.

0 votes

Merci ! Mais comment puis-je supprimer des copies de serveurs mu ? J'ai Apache Tomcat v7.0 (2) et (3) que je veux supprimer. Quelqu'un sait comment ?

82voto

ivanLam Points 431

Un peu différent de Hari :

Clic droit sur le projet ---> Propriétés ---> Chemin de construction Java ---> Ajouter une bibliothèque... ---> Server Runtime ---> Apache Tomcat ----> Terminer.

3 votes

Bonjour ivanLam, Apache Tomcat ne s'affiche pas après Server Runtime ? Que faire maintenant ?

16voto

sarathpetec Points 69

Incluez servlet-api.jar dans le dossier lib de votre serveur. enter image description here

Faites cette étape

enter image description here

1 votes

La solution ne fonctionne pas pour moi, je reçois toujours l'erreur suivante Un conteneur enfant a échoué pendant le démarrage java.util.concurrent.ExecutionException : org.apache.catalina.LifecycleException : Impossible de démarrer le composant [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/messenger]].

13voto

Hari Gudigundla Points 371

Correction rapide - Cela a fonctionné dans Eclipse - Clic droit sur le projet -> Propriétés -> Chemin de construction Java (onglet) -> Ajouter des JARs externes -> localiser l'implémentation du jar servlet api (si Tomcat - son nom est servlet-api.jar) -> cliquer sur OK. C'est tout ! !

14 votes

En référence à l'article de BalusC ci-dessus, ne jamais copier/télécharger/déplacer/inclure manuellement les bibliothèques individuelles spécifiques au conteneur de servlet, telles que servlet-api.jar , jsp-api.jar , el-api.ja r, j2ee.jar , javaee.jar etc. Cela ne ferait qu'entraîner des problèmes de portabilité, de compatibilité, de classpath et de maintenabilité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X