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?

tom
sumber
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:

  1. 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.

      masukkan deskripsi gambar di sini

    b. Atau, melalui preferensi Eclipse

    • Buka Jendela> Preferensi> Server> Lingkungan Runtime .

    • Anda dapat Tambah , Edit dan Hapus server di sini.

      masukkan deskripsi gambar di sini

  2. 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.

      masukkan deskripsi gambar di sini

    b. Atau, dalam proyek yang ada

    • Klik kanan proyek dan pilih Properties .

    • Di bagian Targeted Runtimes , pilih server terintegrasi.

      masukkan deskripsi gambar di sini

    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
sumber
4
@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

impor javax.servlet

LANGKAH 1

Buka properti proyek Anda (dengan Alt+ Enteratau klik kanan)

LANGKAH 2

periksa Apache Tomcat v7.0 di bawah Targeted Runtime dan berfungsi.

prayagupd
sumber
2
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
Freddie Fabregas
81

Sedikit perbedaan dari Hari:

Klik kanan pada proyek ---> Properties ---> Java Build Path ---> Tambah Library ... ---> Server Runtime ---> Apache Tomcat ----> Finish.

ivanLam
sumber
3
Halo ivanLam, Apache Tomcat tidak muncul setelah Server Runtime? Apa yang harus dilakukan sekarang!
Sandeep Pattanaik
15

Sertakan servlet-api.jar dari folder lib server Anda.masukkan deskripsi gambar di sini

Lakukan langkah ini

masukkan deskripsi gambar di sini

sarath
sumber
1
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.

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
Zeeshan Akhter
sumber
12

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

Hari Gudigundla
sumber
14
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.

  1. Klik kanan pada proyek.
  2. Pergi ke Properti.
  3. Pergi ke Java Build Path.
  4. Pilih opsi Tambahkan Perpustakaan dari tab.
  5. Tambahkan Jar File
  6. berikan path servlet-api.jarfile Anda .
  7. Bersihkan dan bangun proyek Anda.
Mitul Maheshwari
sumber
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!

Semoga ini bisa membantu seseorang.

KNP
sumber
3

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

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.

Juha Syrjälä
sumber
3

Untuk proyek pakar menambahkan ketergantungan berikut:

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

Referensi

Untuk proyek gradle:

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

atau unduh javax.servlet.jardan tambahkan ke proyek Anda.

Joby Wilson Mathews
sumber
2

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.

Ivan Vučica
sumber
2

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.

Paul LeBeau
sumber
2

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.

Erica Kane
sumber
0

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?

RuntimeException
sumber
0

Ini bisa juga menjadi alasannya. Saya telah datang dengan mengikuti 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>

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.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>compile</scope>
</dependency>
Muhammad Usman
sumber