Bagaimana cara mengimpor API javax.servlet di proyek Eclipse saya?
320
Saya ingin mengembangkan dengan Servlets di Eclipse, tetapi dikatakan bahwa paket javax.servlettidak dapat diselesaikan. Bagaimana saya bisa menambahkan javax.servletpaket ke proyek Eclipse saya?
im mencoba menjalankan halo servlet jenis kata sederhana, biasanya jika saya ingin membuat gui saya akan mengimpor java ...... swing. *; saya tidak dapat menemukan impor yang tepat untuk servlet
tom
Jawaban:
415
Pastikan Anda memiliki Eclipse dan Server yang tepat
Pastikan Anda menggunakan setidaknya Eclipse IDE untuk pengembang Enterprise Java (dengan Enterprise ). Ini berisi alat pengembangan untuk membuat proyek web yang dinamis dan mudah mengintegrasikan servletcontainers (alat tersebut adalah bagian dari Platform Alat Web, WTP). Jika Anda sudah memiliki Eclipse IDE untuk Java (tanpa Enterprise), dan secara manual menginstal beberapa plugin terkait, maka kemungkinannya adalah itu tidak dilakukan dengan benar. Anda sebaiknya membuangnya dan mengambil Eclipse IDE asli untuk Enterprise Java satu.
Anda juga perlu memastikan bahwa Anda sudah memiliki servletcontainer yang diinstal pada mesin Anda yang mengimplementasikan setidaknya versi Servlet API yang sama dengan servletcontainer di lingkungan produksi, misalnya Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly , dll. Biasanya, hanya mengunduh file ZIP dan mengekstraknya sudah cukup. Dalam kasus Tomcat, jangan tidak men-download format EXE, itu hanya untuk lingkungan produksi berbasis Windows. Lihat juga ao. Beberapa port (8005, 8080, 8009) yang diperlukan oleh Tomcat Server di localhost sudah digunakan .
Servletcontainer adalah implementasi konkret dari Servlet API. Perhatikan bahwa unduhan Java EE SDK di Oracle.com pada dasarnya mengandung GlassFish. Jadi jika Anda sudah mengunduh Java EE SDK, maka pada dasarnya Anda sudah memiliki GlassFish. Perhatikan juga bahwa misalnya GlassFish dan JBoss AS / WildFly lebih dari sekadar servletcontainer, mereka juga mendukung JSF, EJB, JPA, dan semua kefasikan Java EE lainnya. Lihat juga ao. Apa sebenarnya Java EE?
Integrasikan Server dalam Eclipse dan kaitkan dengan Project
Setelah menginstal Eclipse untuk Enterprise Java dan servletcontainer di komputer Anda, lakukan langkah-langkah berikut di Eclipse:
Integrasikan servletcontainer di Eclipse
Sebuah. Melalui tampilan Server
Buka tampilan Server di kotak bawah.
Klik kanan di sana dan pilih New> Server .
Pilih servletcontainer yang sesuai dibuat dan versi dan berjalan melalui wizard.
b. Atau, melalui preferensi Eclipse
Buka Jendela> Preferensi> Server> Lingkungan Runtime .
Anda dapat Tambah , Edit dan Hapus server di sini.
Hubungkan server dengan proyek
Sebuah. Dalam proyek baru
Buka Project Navigator / Explorer di sebelah kiri.
Klik kanan di sana dan pilih New> Project dan kemudian di menu Web> Dynamic Web Project .
Di wizard, atur Target Runtime ke server terintegrasi.
b. Atau, dalam proyek yang ada
Klik kanan proyek dan pilih Properties .
Di bagian Targeted Runtimes , pilih server terintegrasi.
Either way, Eclipse kemudian akan secara otomatis mengambil pustaka servletcontainer di jalur build. Dengan cara ini Anda akan dapat mengimpor dan menggunakan Servlet API.
Jangan pernah membawa-bawa file JAR khusus server yang longgar
Dalam hal apa pun Anda tidak perlu bermain-main di properti Build Path proyek. Anda harus di atas semua tidak pernah secara manual copy / download / memindahkan / memasukkan servletcontainer spesifik individu perpustakaan seperti servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar,javaee.jar , dll hanya akan menyebabkan portabilitas masa depan, kompatibilitas, masalah classpath dan rawatan, karena webapp Anda akan tidak bekerja ketika itu dikerahkan ke servletcontainer dari make / versi yang berbeda dari tempat perpustakaan itu awalnya berasal.
Jika Anda menggunakan Maven, Anda harus benar-benar memastikan bahwa pustaka khusus servletcontainer yang sudah disediakan oleh runtime target ditandai sebagai <scope>provided</scope>.
Berikut adalah beberapa pengecualian khas yang dapat Anda dapatkan ketika Anda sampah /WEB-INF/libatau bahkan /JRE/lib, /JRE/lib/ext, dll dengan perpustakaan servletcontainer spesifik dalam upaya ceroboh untuk memperbaiki kesalahan kompilasi:
@BalusC Jika saya menggunakan Apache Ant untuk membangun proyek saya, bagaimana cara saya menyertakan folder /lib(servlet-api.jar & jsp-api.jar) dari servlet container secara dinamis? Atau apakah saya perlu mengkodekan path ke folder / lib seperti - <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>etc
kaustav datta
1
@ BalusC mengapa proyek pakar dibuat dengan pola dasar maven-archetype-webapptidak termasuk servlet-api JAR sebagai ketergantungan? Proyek ini memiliki index.jsp dengan kesalahan kompilasi. (Eclipse Luna Build id: 20140612-0600, JDK 8, M2eclipse)
arun
1
servlet-apiKetergantungan @arun disediakan oleh lingkungan runtime Servlet seperti Tomcat, Wildfly, Glassfish, dll.,. Jangan pernah memasukkannya sebagai bagian dari aplikasi Anda, karena ada kemungkinan itu berbenturan dengan lingkungan.
asgs
@BalusC, 1) Apakah javax.servlet-api-3.1.0.jar sama dengan tomcat8 / lib / servlet-api.jar? Saya mendekompilasi dua guci, kemudian menemukan moust dari kelas / interface yang sama. 2) Apakah javax.servlet-api-3.1.0.jar container-neutral (bukan librari khusus servletcontainer)?
gfan
@ Gfan: masalah teknis bukanlah apakah pustaka yang disediakan wadah "wadah netral" tetapi prioritas dan pemesanan classloading. Jika pustaka yang disediakan oleh kontainer dimuat oleh classloader yang salah (mis. Via webapp classloader), hal-hal dapat berubah, bahkan jika itu "secara kebetulan" persis versi yang sama. Hanya saja, jangan menyediakan perpustakaan yang disediakan wadah dari tempat duplikat di luar wadah. Titik.
BalusC
220
LANGKAH 1
Buka properti proyek Anda (dengan Alt+ Enteratau klik kanan)
LANGKAH 2
periksa Apache Tomcat v7.0 di bawah Targeted Runtime dan berfungsi.
Membantu saya menambahkan runtime JBOSS saya. Daftar saya kosong.
span
2
Ini solusi untuk saya. Saya telah menetapkan tomcat 6.0 sebagai lingkungan penyebaran saya (sebagai server di gerhana), tetapi diabaikan untuk menentukannya sebagai lingkungan runtime saya ... Saya menduga itu berarti ia dapat menemukan. Jar di folder tomcat / lib saya saat runtime, tetapi tidak pada waktu kompilasi.
Paul
Terima kasih! Tetapi bagaimana saya bisa menghapus salinan server mu? Saya memiliki Apache Tomcat v7.0 (2) dan (3) yang ingin saya hapus. Adakah yang tahu bagaimana caranya?
Robben
Tidak membantu saya untuk menyelesaikan masalah The import javax.servlet cannot be resolved.
mrgloom
1
Ini bekerja! Terima kasih, @mrgloom, Anda mungkin ingin menghapus server dan membuat server baru di localhost Anda
Solusi tidak berfungsi untuk saya yang masih mendapatkan kesalahan di bawah. Wadah anak gagal saat memulai java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Gagal memulai komponen [StandardEngine [Catalina] .StandHost [localhost] .StandardContext [/ messenger]]
Maya Mohite
13
Tambahkan dependensi javax.servlet di pom.xml. Masalah Anda akan teratasi.
Perbaikan Cepat- Ini berfungsi di Eclipse - Klik kanan pada proyek -> Properti -> Java Build Path (Tab) -> Tambahkan External JARs -> cari implementasi servlet api jar (jika Tomcat - namanya servlet-api.jar) -> klik OK. Itu dia !!
Dengan referensi di atas posting BalusC tidak pernah secara manual copy / download / memindahkan / termasuk perpustakaan servletcontainer spesifik individu seperti servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jar, dll hanya akan menyebabkan portabilitas masa depan, kompatibilitas, classpath dan masalah pemeliharaan.
Aniket Kulkarni
5
Anda cukup menyalin servlet-api.jardan menyalin file jar itu ke folder lib, yang ada di WEB-INF. lalu bersihkan dan bangun proyek Anda, kesalahan Anda akan terpecahkan.
**OR**
Anda bisa langsung menambahkan file jar ke perpustakaan dengan menggunakan langkah-langkah berikut.
Downvoting, dengan mengacu atas posting BalusC dan komentar Aniket Kulkarni, tidak pernah secara manual copy / download / memindahkan / termasuk perpustakaan servletcontainer spesifik individu seperti servlet-api.jar, jsp-api.jar, javaee.jar, dll hanya akan menyebabkan masalah portabilitas masa depan, kompatibilitas, classpath dan pemeliharaan.
el-teedee
5
Saya tahu ini adalah pos lama. Namun, saya mengamati contoh lain di mana dalam proyek ini sudah ditambahkan Tomcat tetapi kami masih mendapatkan kesalahan ini. Apakah ini untuk menyelesaikan itu:
Alt + Masukkan Aspek Proyek
Di sebelah kanan, di sebelah detail, adalah tab lain "Runtimes". Server tomcat yang terinstal akan terdaftar di sana. Pilih itu.
Simpan konfigurasi dan DILAKUKAN!
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;publicclassHelloWorldextendsHttpServlet{publicvoid doGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,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>");}}
Ini, tentu saja, hanya berfungsi jika Anda telah menambahkan servlet-api.jarjalur membangun ke Eclipse. Biasanya server aplikasi Anda (mis. Tomcat ) akan memiliki file jar yang tepat.
Saya mendapatkan pengecualian pointer nol selama pembuatan proyek yang terkait dengan "Modul Web Dinamis".
Untuk mendapatkan proyek untuk dikompilasi (yaitu, untuk javax.servletmengimpor berhasil) Saya harus pergi ke Properti proyek , pilih Aspek Proyek di bilah samping, centang Modul Web Dinamis dan klik Terapkan .
Anehnya, kali ini "Modul Web Dinamis" segi dipasang dengan benar, dan impor mulai bekerja.
Banyak dari kita berkembang di Eclipse melalui proyek Maven. Jika demikian, Anda bisa memasukkan dependensi Tomcat di Maven via the tomcat-servlet-apiand tomcat-jsp-apiguci. Satu ada untuk setiap versi Tomcat. Biasanya menambahkan ini dengan cakupan providedke POM Anda sudah cukup. Ini akan membuat bangunan Anda lebih portabel.
Jika Anda meningkatkan Tomcat di masa depan, Anda cukup memperbarui versi guci ini juga.
Anda harus di atas semua tidak pernah secara manual menyalin / mengunduh / memindahkan / menyertakan pustaka servletcontainer khusus individu seperti servlet-api.jar
@BalusC,
Saya lebih suka menggunakan kelas-kelas persis yang akan digunakan aplikasi saya daripada yang disediakan oleh Eclipse (ketika saya merasa seperti pengembang paranoid).
Solusi lain adalah dengan menggunakan Eclipse "Configure Build Path"> Libraries> Add External Jars, dan tambahkan servlet api dari Container apa pun yang dipilih untuk digunakan.
Dan ikuti solusi @kaustav datta saat menggunakan semut untuk membangun - miliki properti seperti tomcat.home atau weblogic.home. Namun itu memperkenalkan kendala lain bahwa pengembang harus menginstal Weblogic di mesin lokalnya jika weblogic digunakan! Ada solusi pembersih lainnya?
Masalah yang belum terselesaikan adalah karena pengecualian spring-boot-starter-tomcat. Hapus saja <exclusions>...</exclusions>ketergantungan itu akan menyelesaikan masalah, tapi pastikan melakukan ini juga akan mengecualikan server tomcat tertanam.
Jika Anda memerlukan tomcat server tertanam juga, Anda dapat menambahkan ketergantungan yang sama dengannya compile scope.
Jawaban:
Pastikan Anda memiliki Eclipse dan Server yang tepat
Pastikan Anda menggunakan setidaknya Eclipse IDE untuk pengembang Enterprise Java (dengan Enterprise ). Ini berisi alat pengembangan untuk membuat proyek web yang dinamis dan mudah mengintegrasikan servletcontainers (alat tersebut adalah bagian dari Platform Alat Web, WTP). Jika Anda sudah memiliki Eclipse IDE untuk Java (tanpa Enterprise), dan secara manual menginstal beberapa plugin terkait, maka kemungkinannya adalah itu tidak dilakukan dengan benar. Anda sebaiknya membuangnya dan mengambil Eclipse IDE asli untuk Enterprise Java satu.
Anda juga perlu memastikan bahwa Anda sudah memiliki servletcontainer yang diinstal pada mesin Anda yang mengimplementasikan setidaknya versi Servlet API yang sama dengan servletcontainer di lingkungan produksi, misalnya Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly , dll. Biasanya, hanya mengunduh file ZIP dan mengekstraknya sudah cukup. Dalam kasus Tomcat, jangan tidak men-download format EXE, itu hanya untuk lingkungan produksi berbasis Windows. Lihat juga ao. Beberapa port (8005, 8080, 8009) yang diperlukan oleh Tomcat Server di localhost sudah digunakan .
Servletcontainer adalah implementasi konkret dari Servlet API. Perhatikan bahwa unduhan Java EE SDK di Oracle.com pada dasarnya mengandung GlassFish. Jadi jika Anda sudah mengunduh Java EE SDK, maka pada dasarnya Anda sudah memiliki GlassFish. Perhatikan juga bahwa misalnya GlassFish dan JBoss AS / WildFly lebih dari sekadar servletcontainer, mereka juga mendukung JSF, EJB, JPA, dan semua kefasikan Java EE lainnya. Lihat juga ao. Apa sebenarnya Java EE?
Integrasikan Server dalam Eclipse dan kaitkan dengan Project
Setelah menginstal Eclipse untuk Enterprise Java dan servletcontainer di komputer Anda, lakukan langkah-langkah berikut di Eclipse:
Integrasikan servletcontainer di Eclipse
Sebuah. Melalui tampilan Server
Buka tampilan Server di kotak bawah.
Klik kanan di sana dan pilih New> Server .
Pilih servletcontainer yang sesuai dibuat dan versi dan berjalan melalui wizard.
b. Atau, melalui preferensi Eclipse
Buka Jendela> Preferensi> Server> Lingkungan Runtime .
Anda dapat Tambah , Edit dan Hapus server di sini.
Hubungkan server dengan proyek
Sebuah. Dalam proyek baru
Buka Project Navigator / Explorer di sebelah kiri.
Klik kanan di sana dan pilih New> Project dan kemudian di menu Web> Dynamic Web Project .
Di wizard, atur Target Runtime ke server terintegrasi.
b. Atau, dalam proyek yang ada
Klik kanan proyek dan pilih Properties .
Di bagian Targeted Runtimes , pilih server terintegrasi.
Either way, Eclipse kemudian akan secara otomatis mengambil pustaka servletcontainer di jalur build. Dengan cara ini Anda akan dapat mengimpor dan menggunakan Servlet API.
Jangan pernah membawa-bawa file JAR khusus server yang longgar
Dalam hal apa pun Anda tidak perlu bermain-main di properti Build Path proyek. Anda harus di atas semua tidak pernah secara manual copy / download / memindahkan / memasukkan servletcontainer spesifik individu perpustakaan seperti
servlet-api.jar
,jsp-api.jar
,el-api.jar
,j2ee.jar
,javaee.jar
, dll hanya akan menyebabkan portabilitas masa depan, kompatibilitas, masalah classpath dan rawatan, karena webapp Anda akan tidak bekerja ketika itu dikerahkan ke servletcontainer dari make / versi yang berbeda dari tempat perpustakaan itu awalnya berasal.Jika Anda menggunakan Maven, Anda harus benar-benar memastikan bahwa pustaka khusus servletcontainer yang sudah disediakan oleh runtime target ditandai sebagai
<scope>provided</scope>
.Berikut adalah beberapa pengecualian khas yang dapat Anda dapatkan ketika Anda sampah
/WEB-INF/lib
atau bahkan/JRE/lib
,/JRE/lib/ext
, dll dengan perpustakaan servletcontainer spesifik dalam upaya ceroboh untuk memperbaiki kesalahan kompilasi:sumber
<property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
etcmaven-archetype-webapp
tidak termasuk servlet-api JAR sebagai ketergantungan? Proyek ini memiliki index.jsp dengan kesalahan kompilasi. (Eclipse Luna Build id: 20140612-0600, JDK 8, M2eclipse)servlet-api
Ketergantungan @arun disediakan oleh lingkungan runtime Servlet seperti Tomcat, Wildfly, Glassfish, dll.,. Jangan pernah memasukkannya sebagai bagian dari aplikasi Anda, karena ada kemungkinan itu berbenturan dengan lingkungan.LANGKAH 1
Buka properti proyek Anda (dengan Alt+ Enteratau klik kanan)
LANGKAH 2
periksa Apache Tomcat v7.0 di bawah Targeted Runtime dan berfungsi.
sumber
The import javax.servlet cannot be resolved
.Sedikit perbedaan dari Hari:
sumber
Sertakan servlet-api.jar dari folder lib server Anda.
Lakukan langkah ini
sumber
Tambahkan dependensi javax.servlet di pom.xml. Masalah Anda akan teratasi.
sumber
Perbaikan Cepat- Ini berfungsi di Eclipse - Klik kanan pada proyek -> Properti -> Java Build Path (Tab) -> Tambahkan External JARs -> cari implementasi servlet api jar (jika Tomcat - namanya servlet-api.jar) -> klik OK. Itu dia !!
sumber
servlet-api.jar
,jsp-api.jar
,el-api.ja
r,j2ee.jar
,javaee.jar
, dll hanya akan menyebabkan portabilitas masa depan, kompatibilitas, classpath dan masalah pemeliharaan.Anda cukup menyalin
servlet-api.jar
dan menyalin file jar itu ke folder lib, yang ada di WEB-INF. lalu bersihkan dan bangun proyek Anda, kesalahan Anda akan terpecahkan.Anda bisa langsung menambahkan file jar ke perpustakaan dengan menggunakan langkah-langkah berikut.
servlet-api.jar
file Anda .sumber
servlet-api.jar
,jsp-api.jar
,javaee.jar
, dll hanya akan menyebabkan masalah portabilitas masa depan, kompatibilitas, classpath dan pemeliharaan.Saya tahu ini adalah pos lama. Namun, saya mengamati contoh lain di mana dalam proyek ini sudah ditambahkan Tomcat tetapi kami masih mendapatkan kesalahan ini. Apakah ini untuk menyelesaikan itu:
Alt + Masukkan
Aspek Proyek
Di sebelah kanan, di sebelah detail, adalah tab lain "Runtimes". Server tomcat yang terinstal akan terdaftar di sana. Pilih itu.
Simpan konfigurasi dan DILAKUKAN!
Semoga ini bisa membantu seseorang.
sumber
Dari wikipedia .
Ini, tentu saja, hanya berfungsi jika Anda telah menambahkan
servlet-api.jar
jalur membangun ke Eclipse. Biasanya server aplikasi Anda (mis. Tomcat ) akan memiliki file jar yang tepat.sumber
Untuk proyek pakar menambahkan ketergantungan berikut:
Referensi
Untuk proyek gradle:
atau unduh
javax.servlet.jar
dan tambahkan ke proyek Anda.sumber
Saya mendapatkan pengecualian pointer nol selama pembuatan proyek yang terkait dengan "Modul Web Dinamis".
Untuk mendapatkan proyek untuk dikompilasi (yaitu, untuk
javax.servlet
mengimpor berhasil) Saya harus pergi ke Properti proyek , pilih Aspek Proyek di bilah samping, centang Modul Web Dinamis dan klik Terapkan .Anehnya, kali ini "Modul Web Dinamis" segi dipasang dengan benar, dan impor mulai bekerja.
sumber
Dalam kasus saya, ketika saya pergi ke Targetted Runtimes , layar, Tomcat 7 tidak terdaftar (dinonaktifkan) meskipun sedang diinstal.
Untuk memperbaikinya, saya harus pergi ke Preferences-> Server-> Runtime Environments lalu uninstall dan instal ulang Tomcat 7.
sumber
Banyak dari kita berkembang di Eclipse melalui proyek Maven. Jika demikian, Anda bisa memasukkan dependensi Tomcat di Maven via the
tomcat-servlet-api
andtomcat-jsp-api
guci. Satu ada untuk setiap versi Tomcat. Biasanya menambahkan ini dengan cakupanprovided
ke POM Anda sudah cukup. Ini akan membuat bangunan Anda lebih portabel.Jika Anda meningkatkan Tomcat di masa depan, Anda cukup memperbarui versi guci ini juga.
sumber
@BalusC,
Saya lebih suka menggunakan kelas-kelas persis yang akan digunakan aplikasi saya daripada yang disediakan oleh Eclipse (ketika saya merasa seperti pengembang paranoid).
Solusi lain adalah dengan menggunakan Eclipse "Configure Build Path"> Libraries> Add External Jars, dan tambahkan servlet api dari Container apa pun yang dipilih untuk digunakan.
Dan ikuti solusi @kaustav datta saat menggunakan semut untuk membangun - miliki properti seperti tomcat.home atau weblogic.home. Namun itu memperkenalkan kendala lain bahwa pengembang harus menginstal Weblogic di mesin lokalnya jika weblogic digunakan! Ada solusi pembersih lainnya?
sumber
Ini bisa juga menjadi alasannya. Saya telah datang dengan mengikuti
pom.xml
.Masalah yang belum terselesaikan adalah karena pengecualian
spring-boot-starter-tomcat
. Hapus saja<exclusions>...</exclusions>
ketergantungan itu akan menyelesaikan masalah, tapi pastikan melakukan ini juga akan mengecualikan server tomcat tertanam.Jika Anda memerlukan tomcat server tertanam juga, Anda dapat menambahkan ketergantungan yang sama dengannya
compile scope
.sumber