Come importare l'API javax.servlet nel mio progetto Eclipse?


320

Voglio sviluppare con Servlet in Eclipse, ma dice che il pacchetto javax.servletnon può essere risolto. Come posso aggiungere un javax.servletpacchetto al mio progetto Eclipse?


sto cercando di eseguire un semplice servlet di tipo hello word, normalmente se volessi creare una gui importerei java ...... swing. *; non riesco a trovare l'importazione giusta per un servlet
tom

Risposte:


415

Assicurati di avere Eclipse e il server giusti

Assicurati di utilizzare almeno Eclipse IDE per sviluppatori Java Enterprise (con Enterprise ). Contiene strumenti di sviluppo per creare progetti Web dinamici e integrare facilmente servletcontainer (tali strumenti fanno parte di Web Tools Platform, WTP). Nel caso in cui disponessi già di Eclipse IDE per Java (senza Enterprise) e di aver installato manualmente alcuni plugin correlati, è probabile che non sia stato eseguito correttamente. Faresti meglio a distruggerlo e prendere il vero IDE Eclipse per Enterprise Java.

È inoltre necessario assicurarsi che sul computer sia già installato un servletcontainer che implementa almeno la stessa versione dell'API Servlet del servletcontainer nell'ambiente di produzione, ad esempio Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly , ecc. Solitamente, solo è sufficiente scaricare il file ZIP ed estrarlo. Nel caso di Tomcat, non scaricare il formato EXE, questo è solo per ambienti di produzione basati su Windows. Vedi anche anche Diverse porte (8005, 8080, 8009) richieste da Tomcat Server su localhost sono già in uso .

Un servletcontainer è un'implementazione concreta dell'API Servlet. Si noti che il download di Java EE SDK su Oracle.com contiene sostanzialmente GlassFish. Quindi, se ti capita di aver già scaricato Java EE SDK, allora sostanzialmente hai già GlassFish. Si noti inoltre che GlassFish e JBoss AS / WildFly sono più di un semplice servletcontainer, inoltre supportano JSF, EJB, JPA e tutte le altre fantasie Java EE. Vedi anche ao Cos'è esattamente Java EE?


Integrare il server in Eclipse e associarlo a Project

Dopo aver installato Eclipse per Enterprise Java e un servletcontainer sul computer, eseguire le seguenti operazioni in Eclipse:

  1. Integrare servletcontainer in Eclipse

    un. Tramite vista Server

    • Apri la vista Server nella casella in basso.

    • Fai clic con il tasto destro del mouse e scegli Nuovo> Server .

    • Scegli la marca e la versione del servletcontainer appropriate e segui la procedura guidata.

      inserisci qui la descrizione dell'immagine

    b. Oppure, tramite le preferenze di Eclipse

    • Apri finestra> Preferenze> Server> Ambienti di runtime .

    • Puoi aggiungere , modificare e rimuovere server qui.

      inserisci qui la descrizione dell'immagine

  2. Associare il server al progetto

    un. Nel nuovo progetto

    • Apri Project Navigator / Explorer sul lato sinistro.

    • Fai clic con il pulsante destro del mouse e scegli Nuovo> Progetto, quindi nel menu Web> Progetto Web dinamico .

    • Nella procedura guidata, impostare Target Runtime sul server integrato.

      inserisci qui la descrizione dell'immagine

    b. Oppure, nel progetto esistente

    • Fare clic con il tasto destro del mouse sul progetto e selezionare Proprietà .

    • Nella sezione Runtime mirati , selezionare il server integrato.

      inserisci qui la descrizione dell'immagine

    Ad ogni modo, Eclipse prenderà automaticamente le librerie del servletcontainer nel percorso di compilazione. In questo modo sarai in grado di importare e utilizzare l'API Servlet.


Non portare mai con sé file JAR indipendenti dal server

In ogni caso non dovresti avere la necessità di armeggiare nella proprietà Build Path del progetto. Si dovrebbe soprattutto mai copiare manualmente / download / movimento / include l'individuo servletcontainer-specifiche librerie come servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jar, ecc porterebbe solo alla portabilità futuro, la compatibilità, classpath e manutenibilità guai, perché il vostro webapp non sarebbe il lavoro quando è distribuito su un servletcontainer di una marca / versione diversa rispetto a quella da cui sono originariamente ottenute quelle librerie.

Nel caso in cui si utilizzi Maven, è necessario assicurarsi che le librerie specifiche del servletcontainer che sono già fornite dal runtime di destinazione siano contrassegnate come <scope>provided</scope>.

Qui ci sono alcune eccezioni tipici che si possono ottenere quando si sparse sul /WEB-INF/libo addirittura /JRE/lib, /JRE/lib/extecc con le librerie servletcontainer-specifici in un tentativo incurante di correggere gli errori di compilazione:


4
@BalusC Se sto usando Apache Ant per compilare il mio progetto, come posso includere dinamicamente la cartella /lib(servlet-api.jar & jsp-api.jar) del contenitore servlet? O devo codificare il percorso della cartella / lib come - <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>etc
kaustav datta

1
@BalusC perché i progetti maven sono creati con archetipo che maven-archetype-webappnon include il JAR servlet-api come dipendenza? Il progetto ha un index.jsp con errore di compilazione. (Eclipse Luna Corporatura ID: 20.140.612-0.600, JDK 8, m2eclipse)
Arun

1
Le servlet-apidipendenze @arun sono fornite dagli ambienti di runtime Servlet come Tomcat, Wildfly, Glassfish, ecc.,. Non includerlo mai come parte della tua app, poiché esiste una buona possibilità che si scontri con l'ambiente.
chiede il

@BalusC, 1) javax.servlet-api-3.1.0.jar è uguale a tomcat8 / lib / servlet-api.jar? Decompilo i due vasetti, quindi trovo che i moust delle classi / interfacce siano gli stessi. 2) javax.servlet-api-3.1.0.jar è container-neutral (non librerie specifiche per servletcontainer)?
gfan,

@gfan: il problema tecnico non è se le librerie fornite dal contenitore sono "neutre dal contenitore", ma la precedenza e l'ordinamento del caricamento di classe. Se le librerie fornite dal contenitore vengono caricate dal classloader errato (ad es. Tramite il webloader classloader), le cose potrebbero andare in rovina, anche se "coincidendo" esattamente con la stessa versione. Basta non fornire librerie fornite dal contenitore da posizioni duplicate all'esterno del contenitore. Periodo.
BalusC,

220

import javax.servlet

PASSO 1

Vai alle proprietà del tuo progetto (con Alt+ Entero tasto destro del mouse)

PASSO 2

controlla Apache Tomcat v7.0 in Runtime mirato e funziona.


2
Mi ha aiutato ad aggiungere il mio runtime JBOSS. La mia lista era vuota.
durata

2
Questa è stata la soluzione per me. Avevo impostato Tomcat 6.0 come ambiente di distribuzione (come server in eclipse), ma ho trascurato di specificarlo come ambiente di runtime ... Immagino che ciò significhi che potrebbe trovare i jar nella mia cartella tomcat / lib in fase di runtime, ma non in fase di compilazione.
Paul,

Grazie! Ma come posso eliminare copie dei server mu? Ho Apache Tomcat v7.0 (2) e (3) che voglio eliminare. Qualcuno sa come?
Robben,

Non mi ha aiutato a risolvere il problema The import javax.servlet cannot be resolved.
mrgloom,

1
Questo funziona! Grazie, @mrgloom, potresti voler rimuovere il server e creare un nuovo server nel tuo host locale
Freddie Fabregas,

81

Piccola differenza da Hari:

Fare clic con il tasto destro del mouse sul progetto ---> Proprietà ---> Percorso build Java ---> Aggiungi libreria ... ---> Runtime server ---> Apache Tomcat ----> Fine.


3
Ciao ivanLam, Apache Tomcat non viene visualizzato dopo Server Runtime? Cosa fare adesso!
Sandeep Pattanaik,

15

Includi servlet-api.jar dalla cartella lib del tuo server.inserisci qui la descrizione dell'immagine

Fai questo passaggio

inserisci qui la descrizione dell'immagine


1
La soluzione non funziona per me continuando a visualizzare l'errore seguente Un contenitore figlio non è riuscito durante l'avvio java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Impossibile avviare il componente [StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ messenger]]
Maya Mohite,

13

Aggiungi la dipendenza javax.servlet in pom.xml. Il tuo problema sarà risolto.

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

12

Correzione rapida - Funzionava in Eclipse - Tasto destro sul progetto -> Proprietà -> Percorso build Java (scheda) -> Aggiungi JAR esterni -> individua l'implementazione del vaso API del servlet (se Tomcat - si chiama servlet-api.jar) -> fai clic su OK. Questo è tutto !!


14
Con riferimento alle sopra BalusC messaggio copiare mai manualmente / download / movimento / include le singole biblioteche servletcontainer-specifici, come servlet-api.jar, jsp-api.jar, el-api.jaR, j2ee.jar, javaee.jar, ecc porterebbe solo alla portabilità futuro, la compatibilità, classpath e guai manutenibilità.
Aniket Kulkarni,

5

puoi semplicemente copiare servlet-api.jare copiare i file jar nella cartella lib, che si trova in WEB-INF. quindi pulisci e costruisci il tuo progetto, i tuoi errori saranno risolti.

  **OR**

è possibile aggiungere direttamente file jar alla libreria seguendo i passaggi seguenti.

  1. Fare clic con il tasto destro sul progetto.
  2. Vai a Proprietà.
  3. Vai a Java Build Path.
  4. Seleziona l'opzione Aggiungi libreria dalle schede.
  5. Aggiungi file Jar
  6. dare il percorso del tuo servlet-api.jarfile.
  7. Pulisci e costruisci il tuo progetto.

Downvoting, con riferimento al precedente BalusC postale e Aniket Kulkarni commento, copiare mai manualmente / download / movimento / include le singole biblioteche servletcontainer-specifici, come servlet-api.jar, jsp-api.jar, javaee.jar, ecc porterebbe solo alla portabilità futuro, di compatibilità, classpath e manutenibilità guai.
el-teedee,

5

So che questo è un vecchio post. Tuttavia, ho osservato un'altra istanza in cui nel progetto è già stato aggiunto Tomcat, ma viene comunque visualizzato questo errore. Fatto questo per risolvere il problema:
Alt + Inserisci
sfaccettature del progetto
Sulla destra, accanto ai dettagli, c'è un'altra scheda "Runtime". Il server Tomcat installato verrà elencato lì. Selezionalo
Salva la configurazione e FATTO!

Spero che questo aiuti qualcuno.


3

Da 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>");
  }
}

Questo, ovviamente, funziona solo se hai aggiunto il servlet-api.jarpercorso di compilazione di Eclipse. In genere il server delle applicazioni (ad es. Tomcat ) avrà il file jar giusto.


3

Per i progetti Maven aggiungere la seguente dipendenza:

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

Riferimento

Per progetti di laurea:

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

oppure scarica javax.servlet.jare aggiungi al tuo progetto.


2

Stavo ottenendo un'eccezione puntatore null durante la creazione del progetto relativa a "Dynamic Web Module".

Per ottenere la compilazione del progetto (ovvero l' javax.servletimportazione corretta) sono dovuto andare alle proprietà del progetto , selezionare Facet del progetto nella barra laterale, selezionare Modulo Web dinamico e fare clic su Applica .

Sorprendentemente, questa volta la faccetta "Dynamic Web Module" è stata installata correttamente e l'importazione ha iniziato a funzionare.


2

Nel mio caso, quando sono andato su Targetted Runtimes , schermo, Tomcat 7 non era elencato (disabilitato) nonostante fosse installato.

Per risolvere, ho dovuto andare su Preferenze-> Server-> Ambienti di runtime quindi disinstallare e reinstallare Tomcat 7.


2

Molti di noi si sviluppano in Eclipse tramite un progetto Maven. In tal caso, puoi includere le dipendenze Tomcat in Maven tramite i barattoli tomcat-servlet-apie tomcat-jsp-api. Ne esiste una per ogni versione di Tomcat. Di solito providedè sufficiente aggiungerli con ambito al POM. Ciò manterrà la tua build più portatile.

Se si aggiorna Tomcat in futuro, è sufficiente aggiornare anche la versione di questi vasi.


0

Soprattutto non copiare mai / scaricare / spostare / includere manualmente le librerie specifiche dei singoli servletcontainer come servlet-api.jar

@BalusC,

Preferirei usare le classi esatte che la mia applicazione userà piuttosto che una fornita da Eclipse (quando mi sento uno sviluppatore paranoico).

Un'altra soluzione sarebbe quella di utilizzare Eclipse "Configura percorso di costruzione"> Librerie> Aggiungi vasetti esterni e aggiungere l'API servlet di qualunque contenitore si scelga di usare.

E segui la soluzione di @kaustav datta quando usi la formica per costruire - possiedi una proprietà come tomcat.home o weblogic.home. Tuttavia introduce un altro vincolo che lo sviluppatore deve installare Weblogic sul proprio computer locale se si utilizza Weblogic! Qualche altra soluzione più pulita?


0

Questo potrebbe anche essere il motivo. ho pensato di seguire 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>

Il problema irrisolto era dovuto all'esclusione di spring-boot-starter-tomcat. Basta rimuovere la <exclusions>...</exclusions>dipendenza per risolvere il problema, ma assicurarsi che ciò escluda anche il server Tomcat incorporato.

Se hai bisogno anche di un server Tomcat incorporato puoi aggiungere la stessa dipendenza compile scope.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>compile</scope>
</dependency>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.