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

320

Je souhaite développer avec des servlets dans Eclipse, mais il est indiqué que le package javax.servletne peut pas être résolu. Comment puis-je ajouter un javax.servletpackage à mon projet Eclipse?

à M
la source
im essayant d'exécuter un servlet de type mot bonjour simple, normalement si je voulais faire un gui j'importer java ...... swing. *; je ne peux pas trouver la bonne importation pour un servlet
tom

Réponses:

415

Assurez-vous d'avoir le bon Eclipse et le bon serveur

Assurez-vous que vous utilisez au moins Eclipse IDE pour les développeurs Java d' entreprise (avec l' entreprise ). Il contient des outils de développement pour créer des projets Web dynamiques et intégrer facilement des conteneurs de servlets (ces outils font partie de la plateforme d'outils Web, WTP). Dans le cas où vous possédiez déjà Eclipse IDE pour Java (sans Enterprise) et avez installé manuellement certains plugins associés, il est probable que cela n'ait pas été fait correctement. Vous feriez mieux de le jeter et de récupérer le véritable IDE Eclipse pour Enterprise Java.

Vous devez également vous assurer que vous avez déjà un servletcontainer installé sur votre machine qui implémente au moins la même version d'API Servlet que le servletcontainer dans l'environnement de production, par exemple Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly , etc. Habituellement, juste télécharger le fichier ZIP et l'extraire est suffisant. Dans le cas de Tomcat, ne téléchargez pas le format EXE, c'est uniquement pour les environnements de production basés sur Windows. Voir aussi ao Plusieurs ports (8005, 8080, 8009) requis par Tomcat Server sur localhost sont déjà utilisés .

Un servletcontainer est une implémentation concrète de l'API Servlet. Notez que le téléchargement du SDK Java EE sur Oracle.com contient essentiellement GlassFish. Donc, si vous avez déjà téléchargé le SDK Java EE, vous disposez déjà de GlassFish. Notez également que, par exemple, GlassFish et JBoss AS / WildFly sont plus qu'un simple conteneur de servlet, ils prennent également en charge JSF, EJB, JPA et toutes les autres fonctionnalités Java EE. Voir aussi ao Qu'est-ce que Java EE exactement?


Intégrer le serveur dans Eclipse et l'associer à Project

Après avoir installé Eclipse pour Enterprise Java et un servletcontainer sur votre machine, procédez comme suit dans Eclipse:

  1. Intégrer le servletcontainer dans Eclipse

    une. Vue via les serveurs

    • Ouvrez la vue Serveurs dans la zone inférieure.

    • Faites un clic droit là-bas et choisissez Nouveau> Serveur .

    • Choisissez la marque et la version de conteneur de servlet appropriées et parcourez l'assistant.

      entrez la description de l'image ici

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

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

    • Vous pouvez ajouter , modifier et supprimer des serveurs ici.

      entrez la description de l'image ici

  2. Serveur associé au projet

    une. Dans un nouveau projet

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

    • Faites un clic droit là-bas et choisissez Nouveau> Projet puis dans le menu Web> Projet Web dynamique .

    • Dans l'assistant, définissez le runtime cible sur le serveur intégré.

      entrez la description de l'image ici

    b. Ou, dans un projet existant

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

    • Dans la section Targeted Runtimes , sélectionnez le serveur intégré.

      entrez la description de l'image ici

    Dans les deux cas, Eclipse prendra automatiquement les bibliothèques du servletcontainer dans le chemin de génération. De cette façon, vous pourrez importer et utiliser l'API Servlet.


Ne transportez jamais de fichiers JAR spécifiques au serveur

Vous ne devriez en aucun cas avoir besoin de tripoter la propriété Build Path du projet. Vous devez avant tout jamais copier manuellement / télécharger / déplacer / inclure les bibliothèques individuelles spécifiques au servletcontainer aiment servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar,javaee.jar , etc. Il ne ferait que conduire à la portabilité future, la compatibilité, les troubles classpath et de maintenabilité, parce que votre webapp ne fonctionnerait pas quand il est déployée sur un servletcontainer d'une marque / version différente de celle d'où ces bibliothèques sont originellement obtenues.

Dans le cas où vous utilisez Maven, vous devez vous assurer absolument que les bibliothèques spécifiques au servletcontainer qui sont déjà fournies par le runtime cible sont marquées comme <scope>provided</scope>.

Voici quelques exceptions typiques que vous pouvez obtenir lorsque vous la litière /WEB-INF/libou même /JRE/lib, /JRE/lib/ext, etc avec des bibliothèques spécifiques de servletcontainer dans une tentative de négligence de corriger les erreurs de compilation:

BalusC
la source
4
@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 servlet? Ou dois-je coder en dur le chemin vers le dossier / lib comme - <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>etc
kaustav datta
1
@BalusC pourquoi les projets maven sont-ils créés avec un archétype n'incluant maven-archetype-webapppas 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)
arun
1
Les servlet-apidépendances @arun sont fournies par les environnements d'exécution Servlet comme Tomcat, Wildfly, Glassfish, etc.,. Ne l'incluez jamais dans votre application, car il est possible qu'elle entre en conflit avec celle de l'environnement.
asgs
@BalusC, 1) javax.servlet-api-3.1.0.jar est-il égal à tomcat8 / lib / servlet-api.jar? Je décompile les deux bocaux, puis trouve que les moustiques des classes / interfaces sont les mêmes. 2) javax.servlet-api-3.1.0.jar est-il neutre pour le conteneur (pas pour les bibliothèques spécifiques à servletcontainer)?
gfan
@gfan: le problème technique n'est pas de savoir si les bibliothèques fournies par les conteneurs sont "neutres pour les conteneurs" mais la priorité et l'ordre de chargement des classes. Si les bibliothèques fournies par les conteneurs sont chargées par le mauvais chargeur de classe (par exemple via le chargeur de classe webapp), les choses peuvent faire des ravages, même si c'est "par coïncidence" exactement la même version. Ne fournissez tout simplement pas les bibliothèques fournies par les conteneurs à partir d'emplacements en double à l'extérieur du conteneur. Période.
BalusC
220

import javax.servlet

ÉTAPE 1

Accédez aux propriétés de votre projet (avec Alt+ Enterou clic droit)

ÉTAPE 2

vérifiez Apache Tomcat v7.0 sous Targeted Runtime et cela fonctionne.

Prayagupd
la source
2
M'a aidé à ajouter mon runtime JBOSS. Ma liste était vide.
span
2
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 pourrait trouver les fichiers .jars dans mon dossier tomcat / lib lors de l'exécution, mais pas au moment de la compilation.
Paul
Merci! Mais comment supprimer des copies de serveurs mu? J'ai Apache Tomcat v7.0 (2) et (3) que je souhaite supprimer. Tout le monde sait comment?
Robben
Cela ne m'a pas aidé à résoudre le problème The import javax.servlet cannot be resolved.
mrgloom
1
Cela marche! Merci, @mrgloom, vous voudrez peut-être supprimer le serveur et créer un nouveau serveur dans votre hôte local
Freddie Fabregas
81

Petite différence avec Hari:

Cliquez avec le bouton droit sur le projet ---> Propriétés ---> Chemin de génération Java ---> Ajouter une bibliothèque ... ---> Runtime du serveur ---> Apache Tomcat ----> Terminer.

ivanLam
la source
3
Salut ivanLam, Apache Tomcat n'est pas à l'affiche après l'exécution du serveur? Que faire maintenant!
Sandeep Pattanaik
15

Incluez servlet-api.jar à partir du dossier lib de votre serveur.entrez la description de l'image ici

Faites cette étape

entrez la description de l'image ici

Sarath
la source
1
La solution ne fonctionne pas pour moi toujours en dessous de l'erreur Un conteneur enfant a échoué lors du démarrage java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: échec du démarrage du composant [StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ messenger]]
Maya Mohite
13

Ajoutez la dépendance javax.servlet dans pom.xml. Votre problème sera résolu.

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
Zeeshan Akhter
la source
12

Solution rapide - Cela a fonctionné dans Eclipse - Cliquez avec le bouton droit sur le projet -> Propriétés -> Chemin de génération Java (onglet) -> Ajouter des fichiers JAR externes -> recherchez l'implémentation du pot api du servlet (si Tomcat - son nom servlet-api.jar) -> cliquez sur OK. C'est tout !!

Hari Gudigundla
la source
14
En ce qui concerne plus haut BalusC après jamais copier manuellement / télécharger / déplacer / comprennent les bibliothèques individuelles spécifiques de servletcontainer comme servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jar, etc. Il ne ferait que conduire à la portabilité future, la compatibilité, classpath et les troubles de maintenabilité.
Aniket Kulkarni
5

vous pouvez simplement copier les servlet-api.jarfichiers jar et les copier dans le dossier lib, qui se trouve dans WEB-INF. puis nettoyez et construisez votre projet, vos erreurs seront résolues.

  **OR**

vous pouvez directement ajouter des fichiers jar à la bibliothèque en suivant les étapes suivantes.

  1. Faites un clic droit sur le projet.
  2. Allez dans Propriétés.
  3. Accédez à Java Build Path.
  4. Sélectionnez l'option Ajouter une bibliothèque dans les onglets.
  5. Ajouter des fichiers Jar
  6. donnez le chemin de votre servlet-api.jarfichier.
  7. Nettoyez et construisez votre projet.
Mitul Maheshwari
la source
Downvoting, en référence ci - dessus après BalusC et Aniket Kulkarni commentaire, jamais copier manuellement / télécharger / déplacer / comprennent les bibliothèques individuelles spécifiques de servletcontainer comme servlet-api.jar, jsp-api.jar, javaee.jar, etc. Il ne ferait que conduire à la portabilité future, compatibilité, problèmes classpath et maintenabilité.
el-teedee
5

Je sais que c'est un ancien poste. Cependant, j'ai observé une autre instance où Tomcat a déjà ajouté dans le projet, mais nous obtenons toujours cette erreur. Voici ce que cela a permis de résoudre:
Alt + Entrer
les facettes du projet
À droite, à côté des détails, se trouve un autre onglet "Runtimes". Le serveur tomcat installé y sera répertorié. Sélectionnez-le.
Enregistrez la configuration et TERMINÉ!

J'espère que cela aide quelqu'un.

KNP
la source
3

De wikipedia .

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
                "Transitional//EN\">\n" +
                "<html>\n" +
                "<head><title>Hello WWW</title></head>\n" +
                "<body>\n" +
                "<h1>Hello WWW</h1>\n" +
                "</body></html>");
  }
}

Bien sûr, cela ne fonctionne que si vous avez ajouté le servlet-api.jarchemin de génération à Eclipse. Généralement, votre serveur d'applications (par exemple Tomcat ) aura le bon fichier jar.

Juha Syrjälä
la source
3

Pour les projets maven, ajoutez la dépendance suivante:

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

Référence

Pour les projets Gradle:

dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}

ou téléchargez javax.servlet.jaret ajoutez à votre projet.

Joby Wilson Mathews
la source
2

J'obtenais une exception de pointeur nul lors de la création du projet lié au "Module Web dynamique".

Pour obtenir le projet à compiler (c'est-à-dire javax.servletà importer avec succès), je devais aller dans les propriétés du projet , choisir Project Facets dans la barre latérale, cocher Dynamic Web Module et cliquer sur Appliquer .

Étonnamment, cette fois, la facette "Dynamic Web Module" s'est installée correctement et l'importation a commencé à fonctionner.

Ivan Vučica
la source
2

Dans mon cas, quand je suis allé au Targetted Runtimes écran , Tomcat 7 n'était pas répertorié (désactivé) malgré son installation.

Pour résoudre ce problème, je devais aller dans Préférences-> Serveur-> Environnements d'exécution, puis désinstaller et réinstaller Tomcat 7.

Paul LeBeau
la source
2

Beaucoup d'entre nous se développent dans Eclipse via un projet Maven. Si c'est le cas, vous pouvez inclure les dépendances Tomcat dans Maven via les jars tomcat-servlet-apiet tomcat-jsp-api. Un existe pour chaque version de Tomcat. Habituellement, les ajouter avec une portée providedà votre POM est suffisant. Cela gardera votre build plus portable.

Si vous mettez à niveau Tomcat à l'avenir, il vous suffit également de mettre à jour la version de ces pots.

Erica Kane
la source
0

Vous ne devez surtout jamais copier / télécharger / déplacer / inclure manuellement les bibliothèques spécifiques à chaque servletcontainer comme servlet-api.jar

@BalusC,

Je préférerais utiliser les classes exactes que mon application va utiliser plutôt que celles fournies par Eclipse (quand je me sens comme un développeur paranoïaque).

Une autre solution consisterait à utiliser Eclipse "Configurer le chemin de génération"> Bibliothèques> Ajouter des fichiers JAR externes et à ajouter l'api de servlet du conteneur que l'on choisit d'utiliser.

Et suivez la solution de @kaustav datta lorsque vous utilisez ant pour construire - ayez une propriété comme tomcat.home ou weblogic.home. Cependant, cela introduit une autre contrainte que le développeur doit installer Weblogic sur sa machine locale si weblogic est utilisé! Une autre solution plus propre?

RuntimeException
la source
0

Cela pourrait également être la raison. je suis venu avec suivre pom.xml.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Le problème non résolu était dû à l'exclusion de spring-boot-starter-tomcat. Supprimez simplement la <exclusions>...</exclusions>dépendance, cela résoudra le problème, mais assurez-vous que cela exclura également le serveur Tomcat intégré.

Si vous avez également besoin d'un serveur tomcat intégré, vous pouvez ajouter la même dépendance avec compile scope.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>compile</scope>
</dependency>
Muhammad Usman
la source