Eclipse içinde Servlets ile geliştirmek istiyorum, ancak paketin javax.servlet
çözülemeyeceğini söylüyor . javax.servlet
Eclipse projeme nasıl paket ekleyebilirim ?
Eclipse içinde Servlets ile geliştirmek istiyorum, ancak paketin javax.servlet
çözülemeyeceğini söylüyor . javax.servlet
Eclipse 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.jar
senin 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/lib
hatta /JRE/lib
, /JRE/lib/ext
vb 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-webapp
bağı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-api
bağı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.ja
r, j2ee.jar
, javaee.jar
vb, 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.jar
ve 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.jar
dosyanızın yolunu belirtin.servlet-api.jar
, jsp-api.jar
, javaee.jar
vb, 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.jar
Eclipse 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.jar
projenize 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.servlet
baş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-api
ve tomcat-jsp-api
kavanozları aracılığıyla dahil edebilirsiniz . Tomcat'in her sürümü için bir tane var. Genellikle bunları kapsamınıza POM'nize eklemek provided
yeterlidir. 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>