Eclipse projemdeki javax.servlet API'sini nasıl alabilirim?


320

Eclipse içinde Servlets ile geliştirmek istiyorum, ancak paketin javax.servletçözülemeyeceğini söylüyor . javax.servletEclipse projeme nasıl paket ekleyebilirim ?


im basit bir merhaba kelime türü servlet, normalde bir gui yapmak istedim i java ...... salıncak çalıştırmak için çalışıyor. salıncak. *; Bir sunucu uygulaması için doğru ithalatı bulamıyorum
tom

Yanıtlar:


415

Doğru Eclipse ve Server'a sahip olduğunuzdan emin olun

Enterprise Java geliştiricileri için ( Enterprise ile birlikte ) en azından Eclipse IDE kullandığınızdan emin olun . Dinamik web projeleri oluşturmak ve servletcontainers'ı kolayca entegre etmek için geliştirme araçları içerir (bu araçlar Web Araçları Platformu, WTP'nin bir parçasıdır). Zaten Java için Eclipse IDE'niz (Enterprise olmadan) ve bazı ilgili eklentileri manuel olarak yüklediyseniz, bunun düzgün yapılmaması ihtimali vardır. En iyisi onu çöp kutusuna atmalı ve Enterprise Java için gerçek Eclipse IDE'yi almalısınız.

Ayrıca, makinenizde, üretim ortamında sunucu uygulamasıyla en az aynı Servlet API sürümünü uygulayan bir sunucu uygulamacığı yüklü olduğundan emin olmanız gerekir; örneğin Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly , vb. ZIP dosyasını indirip çıkartmak yeterlidir. Tomcat durumunda, do not yalnızca Windows tabanlı üretim ortamları için var EXE formatında indirmek. Ayrıca bkz . Tomhost Server tarafından localhost'ta gerekli olan birkaç bağlantı noktası (8005, 8080, 8009) zaten kullanımda .

Servletcontainer, Servlet API'sinin somut bir uygulamasıdır. Not Java EE SDK Oracle.com'un de indirme temelde GlassFish içerir. Dolayısıyla, Java EE SDK'yı zaten indirdiyseniz, temel olarak GlassFish'e sahipsiniz. Ayrıca GlassFish ve JBoss AS / WildFly'nin sadece bir servletcontainer'dan daha fazlası olduğunu, JSF, EJB, JPA ve diğer tüm Java EE fantezilerini de desteklediğini unutmayın. Ayrıca bkz. Ao Java EE tam olarak nedir?


Sunucuyu Eclipse'e entegre edin ve Project ile ilişkilendirin

Hem Enterprise Java için Eclipse hem de makinenize bir servletcontainer yükledikten sonra Eclipse'de aşağıdaki adımları uygulayın:

  1. Eclipse'de servletcontainer'ı entegre edin

    a. Sunucular görünümü ile

    • Alt kutudaki Sunucular görünümünü açın .
    • Oraya sağ tıklayın ve Yeni> Sunucu'yu seçin .
    • Uygun servletcontainer markasını ve sürümünü seçin ve sihirbazda yürüyün.

      resim açıklamasını buraya girin

    b. Veya Eclipse tercihleriyle

    • Açık Pencere> Tercihler> Sunucu> Runtime Ortamları .
    • Sen edebilirsiniz ekleyin , düzenleyin ve Kaldır burada sunucularını.

      resim açıklamasını buraya girin

  2. Sunucuyu projeyle ilişkilendir

    a. Yeni projede

    • Sol taraftaki Project Navigator / Explorer'ı açın .
    • Oraya sağ tıklayın ve Yeni> Proje'yi seçin ve ardından Web> Dinamik Web Projesi menüsünde .
    • Sihirbazda, Hedef Çalışma Zamanı'nı tümleşik sunucuya ayarlayın.

      resim açıklamasını buraya girin

    b. Veya mevcut projede

    • Projeyi sağ tıklayın ve Özellikler'i seçin .
    • In Hedefli Runtimes bölümünde, entegre sunucuyu seçin.

      resim açıklamasını buraya girin

    Her iki durumda da Eclipse, servletcontainer'in kitaplıklarını otomatik olarak oluşturma yoluna götürür. Bu şekilde Servlet API'sını içe aktarabilir ve kullanabilirsiniz.


Asla sunucuya özgü JAR dosyalarını taşımayın

Her durumda , projenin Oluşturma Yolu özelliğinde uğraşmanıza gerek kalmamalıdır . Yukarıdaki tüm olmalıdır asla / indirme / taşıma / kütüphaneler gibi bireysel servletcontainer-özgü dahil kopya elle servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jarsenin Webapp değil bir iş ne zaman, çünkü ancak ileride taşınabilirlik, uyumluluk, sınıf yolu ve bakımı sıkıntılara yol açacak, vb bu kitaplıkların orijinal olarak alındığı yerden farklı bir marka / versiyona sahip bir sunucu kabına yerleştirilir.

Maven kullanıyorsanız, hedef çalışma zamanı tarafından sağlanan servletcontainer'a özgü kitaplıkların kesinlikle işaretlendiğinden emin olmanız gerekir <scope>provided</scope>.

İşte size çöp alabilirsiniz hangi bazı tipik istisnalar /WEB-INF/libhatta /JRE/lib, /JRE/lib/extvb derleme hataları düzeltmek için dikkatsiz bir girişimde servletcontainer özgü kitaplıkları ile:


4
@BalusC Projemi oluşturmak için Apache Ant kullanıyorsanız, sunucu uygulaması kapsayıcısının /lib(servlet-api.jar & jsp-api.jar) klasörünü dinamik olarak nasıl ekleyebilirim? Yoksa / lib klasörünün yolunu sabit <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
kodlamam gerekiyor mu

1
@BalusC Neden arketip ile oluşturulan maven projeleri maven-archetype-webappbağımlılık olarak servlet-api JAR'ı içermiyor ? Projede bir index.jsp derleme hatası var. (Eclipse Luna Yapı kimliği: 20140612-0600, JDK 8, M2eclipse)
arun

1
@arun servlet-apibağımlılıkları Tomcat, Wildfly, Glassfish, vb. gibi Servlet çalışma ortamı ortamları tarafından sağlanır. Uygulamanızın bir parçası olarak bunu dahil etmeyin, çünkü çevre ile çatışması için iyi bir olasılık var.
Eylül'de

@BalusC, 1) javax.servlet-api-3.1.0.jar, tomcat8 / lib / servlet-api.jar'a eşit mi? Ben iki kavanoz koda sonra sınıflar / arayüzleri moust aynı olduğunu bulmak. 2) javax.servlet-api-3.1.0.jar kapsayıcı nötr mü (servletcontainer'a özgü kütüphaneler değil)?
gfan

@gfan: teknik sorun, kapsayıcı tarafından sağlanan kitaplıkların "kapsayıcı nötr" olup olmadığı değil, sınıf yükleme önceliği ve sıralamasıdır. Kap tarafından sağlanan kitaplıklar yanlış sınıf yükleyici tarafından yüklenirse (örn. Webapp sınıf yükleyicisi aracılığıyla), "tesadüfen" tam olarak aynı sürüm olsa bile işler zarar görebilir. Yalnızca, kapsayıcı dışındaki yinelenen yerlerden kapsayıcı tarafından sağlanan kitaplıkları vermeyin. Dönemi.
BalusC

220

içe aktar javax.servlet

AŞAMA 1

Projenizin özelliklerine gidin ( Alt+ Enterveya yeniden tıklama ile)

ADIM 2

Hedeflenen Çalışma Zamanı altında Apache Tomcat v7.0'ı kontrol edin ve çalışır.


2
JBOSS çalışma zamanımı eklememe yardımcı oldu. Listem boştu.
yayılma

2
Benim için çözüm buydu. Tomcat 6.0'ı dağıtım ortamım (eclipse içindeki bir sunucu olarak) olarak ayarlamıştım, ancak çalışma zamanı ortamım olarak belirtmeyi ihmal ettim ... ama derleme zamanında değil.
Paul

Teşekkürler! Ancak mu sunucularının kopyalarını nasıl silebilirim? Silmek istediğim Apache Tomcat v7.0 (2) ve (3) var. Nasıl olduğunu bilen var mı?
Robben

Sorunu çözmeme yardımcı olmadı The import javax.servlet cannot be resolved.
mrgloom

1
Bu çalışıyor! Teşekkürler, mrgloom, sunucuyu kaldırmak ve yerel ana bilgisayarınızda yeni bir sunucu oluşturmak isteyebilirsiniz
Freddie Fabregas

81

Hari'den biraz fark:

Projeye sağ tıklayın ---> Özellikler ---> Java Derleme Yolu ---> Kütüphane Ekle ... ---> Sunucu Çalışma Zamanı ---> Apache Tomcat ----> Son.


3
Merhaba ivanLam, Apache Tomcat Sunucu Çalışma Zamanı'ndan sonra gösterilmiyor? Şimdi ne yapmalı!
Sandeep Pattanaik

15

Sunucu lib klasörünüzden servlet-api.jar dosyasını ekleyin.resim açıklamasını buraya girin

Bu adımı yap

resim açıklamasını buraya girin


1
Çözüm hala benim için hata almıyor Çalıştırma hatası sırasında bir alt kapsayıcı başarısız oldu java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: [StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ messenger]]
Maya Mohite

13

Pom.xml dosyasına javax.servlet bağımlılığını ekleyin. Sorununuz çözülecek.

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

12

Hızlı Düzeltme - Bu Eclipse'de çalıştı - Projeye sağ tıklayın -> Özellikler -> Java Oluşturma Yolu (Sekme) -> Harici JAR'lar Ekle -> sunucu uygulaması api jar uygulamasını bulun (Tomcat - adında servlet-api.jar ise) -> Tamam'ı tıklayın. Bu kadar !!


14
Asla elle kopyalamak BalusC mesaja Yukarıdaki referans ile / indirme / taşıma / gibi bireysel servletcontainer özgü özel kütüphaneler içerir servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jarvb, ancak ileride taşınabilirlik, uyumluluk, sınıf yolunda ve bakımı sıkıntılara yol olacaktır.
Aniket Kulkarni

5

basitçe kopyalayıp servlet-api.jarve WEB-INF olan lib klasörüne, içine kavanoz dosyaları kopyalamak. sonra sadece projenizi temizleyin ve inşa edin, hatalarınız çözülecektir.

  **OR**

aşağıdaki adımları kullanarak doğrudan jar dosyalarını kütüphaneye ekleyebilirsiniz.

  1. Projeye sağ tıklayın.
  2. Özellikler'e gidin.
  3. Java Derleme Yolu'na gidin.
  4. Sekmelerden Kitaplık Ekle seçeneğini belirleyin.
  5. Jar Dosyaları Ekleme
  6. servlet-api.jardosyanızın yolunu belirtin.
  7. Projenizi temizleyin ve oluşturun.

BalusC yazı ve Aniket Kulkarni yorumun yukarıda atıfta bulunularak, Downvoting, asla elle kopyalama / indirme / taşıma / gibi bireysel servletcontainer özgü özel kütüphaneler içerir servlet-api.jar, jsp-api.jar, javaee.jarvb, ancak ileride taşınabilirlik, uyumluluk, sınıf yolu ve bakımı sıkıntılara yol olacaktır.
el-teedee

5

Bunun eski bir gönderi olduğunu biliyorum. Ancak, projede Tomcat'in eklenmiş olduğu başka bir örneği gözlemledim, ancak yine de bu hatayı alıyoruz. Bunu çözmek için şunu yapın:
Alt + Proje Özelliklerini Gir Sağda, ayrıntıların yanında başka bir sekme "Çalışma Zamanı". Kurulu tomcat sunucusu burada listelenir. Seçin. Yapılandırmayı kaydedin ve YAPILDI!


Umarım bu birine yardımcı olur.


3

Gönderen 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>");
  }
}

Bu, elbette, yalnızca servlet-api.jarEclipse oluşturma yolunu eklediyseniz çalışır . Genellikle uygulama sunucunuzda (örn. Tomcat ) doğru jar dosyası bulunur.


3

Maaven projeleri için aşağıdaki bağımlılığı ekleyin:

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

Referans

Gradle projeleri için:

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

veya javax.servlet.jarprojenize indirin ve ekleyin.


2

"Dinamik Web Modülü" ile ilgili proje oluşturma sırasında boş bir işaretçi istisnası alıyordum.

Projenin derlenmesini sağlamak (yani javax.servletbaşarıyla içe aktarmak için) projenin Özellikler bölümüne gitmem , kenar çubuğundan Proje Özelliklerini seçmem , Dinamik Web Modülünü işaretlemem ve Uygula'yı tıklatmam gerekiyordu .

Şaşırtıcı bir şekilde, bu sefer "Dinamik Web Modülü" yönü doğru bir şekilde kuruldu ve içe aktarma çalışmaya başladı.


2

Benim durumumda, Hedeflenen Çalışma Zamanları ekranına gittiğimde , Tomcat 7 kurulmasına rağmen listelenmedi (devre dışı).

Düzeltmek için Tercihler-> Sunucu-> Çalışma Zamanı Ortamları'na gidip Tomcat 7'yi kaldırıp yeniden yüklemem gerekiyordu.


2

Birçoğumuz Eclipse'de bir Maven projesi ile gelişiyoruz. Öyleyse, Tomcat bağımlılıklarını Maven'e tomcat-servlet-apive tomcat-jsp-apikavanozları aracılığıyla dahil edebilirsiniz . Tomcat'in her sürümü için bir tane var. Genellikle bunları kapsamınıza POM'nize eklemek providedyeterlidir. Bu, yapınızı daha taşınabilir tutacaktır.

Gelecekte Tomcat'i yükseltirseniz, bu kavanozların sürümünü de güncellemeniz yeterlidir.


0

Her şeyden önce, servlet-api.jar gibi servletcontainer'a özel kütüphaneleri asla manuel olarak kopyalamayın / indirmeyin / taşımayın / eklemeyin.

@BalusC,

Eclipse (bir paranoyak geliştirici gibi hissediyorum) tarafından sağlanan yerine, benim uygulama kullanacağı kesin sınıfları kullanmayı tercih ederim.

Başka bir çözüm, Eclipse "Yapı Yolunu Yapılandır"> Kütüphaneler> Harici Kavanozlar Eklemek ve kapsayıcıyı kullanmayı seçtiği her şeye servlet api eklemek olacaktır.

Ve inşa etmek için karınca kullanırken @kaustav datta'nın çözümünü takip edin - tomcat.home veya weblogic.home gibi bir özelliğe sahip olun. Ancak, weblogic kullanılıyorsa geliştiricinin yerel makinesine Weblogic'i yüklemesi gereken başka bir kısıtlama getirmektedir! Başka temiz bir çözüm var mı?


0

Bunun nedeni de bu olabilir. Ben takip ettik 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>

Çözümlenemeyen sorunun hariç tutulmasıydı spring-boot-starter-tomcat. Sadece <exclusions>...</exclusions>sorunu yeniden çözecek bağımlılığı kaldırın , ancak bunu yapmanın gömülü tomcat sunucusunu da hariç tutacağından emin olun .

Gömülü tomcat sunucusuna da ihtiyacınız varsa, aynı bağımlılığı ekleyebilirsiniz compile scope.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>compile</scope>
</dependency>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.