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 ?
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 ?
Yanıtlar:
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?
Hem Enterprise Java için Eclipse hem de makinenize bir servletcontainer yükledikten sonra Eclipse'de aşağıdaki adımları uygulayın:
Eclipse'de servletcontainer'ı entegre edin
a. Sunucular görünümü ile
Uygun servletcontainer markasını ve sürümünü seçin ve sihirbazda yürüyün.
b. Veya Eclipse tercihleriyle
Sunucuyu projeyle ilişkilendir
a. Yeni projede
Sihirbazda, Hedef Çalışma Zamanı'nı tümleşik sunucuya ayarlayın.
b. Veya mevcut projede
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.
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:
<property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
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)
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.

Projenizin özelliklerine gidin ( Alt+ Enterveya yeniden tıklama ile)
Hedeflenen Çalışma Zamanı altında Apache Tomcat v7.0'ı kontrol edin ve çalışır.
The import javax.servlet cannot be resolved.
Hari'den biraz fark:
Projeye sağ tıklayın ---> Özellikler ---> Java Derleme Yolu ---> Kütüphane Ekle ... ---> Sunucu Çalışma Zamanı ---> Apache Tomcat ----> Son.
Sunucu lib klasörünüzden servlet-api.jar dosyasını ekleyin.
Bu adımı yap

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>
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 !!
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.
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.
servlet-api.jardosyanızın yolunu belirtin.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.
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.
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.
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>
Gradle projeleri için:
dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
veya javax.servlet.jarprojenize indirin ve ekleyin.
"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ı.
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.
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.
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ı?
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>