मैं अपने ग्रहण प्रोजेक्ट में javax.servlet एपीआई कैसे आयात करूं?


320

मैं ग्रहण में सर्वलेट्स के साथ विकास करना चाहता हूं, लेकिन यह कहता है कि पैकेज javax.servletको हल नहीं किया जा सकता है। मैं javax.servletअपनी ग्रहण परियोजना में पैकेज कैसे जोड़ सकता हूं ?


मैं एक साधारण हैलो शब्द प्रकार सर्वलेट चलाने की कोशिश कर रहा हूँ, सामान्य रूप से अगर मैं एक गुई बनाना चाहता था तो मैं जावा ...... स्विंग आयात करूँगा? * मैं एक सर्वलेट के लिए सही आयात नहीं मिल सकता है
टॉम

जवाबों:


415

सुनिश्चित करें कि आपने सही ग्रहण और सर्वर किया है

सुनिश्चित करें कि आप कम से कम ग्रहण आईडीई एंटरप्राइज़ जावा डेवलपर्स ( एंटरप्राइज़ के साथ ) का उपयोग कर रहे हैं । इसमें डायनामिक वेब प्रोजेक्ट बनाने के लिए विकास टूल शामिल हैं और आसानी से सर्वलेटकनेक्टर्स को एकीकृत किया जाता है (वे उपकरण वेब टूल प्लेटफ़ॉर्म, डब्ल्यूटीपी का हिस्सा हैं)। यदि आपके पास जावा (एंटरप्राइज़) के बिना पहले से ही ग्रहण आईडीई था, और मैन्युअल रूप से कुछ संबंधित प्लगइन्स स्थापित किए गए हैं, तो संभावना है कि यह ठीक से नहीं किया गया था। आप इसे सबसे अच्छी तरह से कचरा कर सकते हैं और एंटरप्राइज जावा एक के लिए वास्तविक ग्रहण आईडीई हड़प लेंगे।

आप यह भी सुनिश्चित करने के लिए आप पहले से ही उदाहरण के लिए, एक servletcontainer अपने मशीन जो उत्पादन वातावरण में servletcontainer के रूप में लागू कम से कम एक ही सर्वलेट एपीआई संस्करण पर स्थापित किया है कि जरूरत अपाचे बिलाव , ओरेकल ग्लासफिश , JBoss के रूप में / WildFly आमतौर पर, आदि, बस ज़िप फ़ाइल डाउनलोड करना और उसे निकालना पर्याप्त है। टॉमकैट के मामले में, ईएक्सई प्रारूप डाउनलोड न करें , यह केवल विंडोज आधारित उत्पादन वातावरण के लिए है। यह भी देखें कि स्थानीयहोस्ट में टॉमकैट सर्वर द्वारा आवश्यक कई पोर्ट (8005, 8080, 8009) पहले से ही उपयोग में हैं

एक सर्वलेटेनर सर्वलेट एपीआई का एक ठोस कार्यान्वयन है। ध्यान दें कि जावा ईई एसडीके ओरेकल डॉट कॉम पर डाउनलोड होता है जिसमें मूल रूप से ग्लासफिश होता है। तो अगर आप पहले से ही जावा ईई एसडीके डाउनलोड कर चुके हैं, तो आपके पास पहले से ग्लासफिश है। यह भी ध्यान दें कि उदाहरण के लिए GlassFish और JBoss AS / WildFly सिर्फ सर्वलेटकॉनर से अधिक हैं , वे JSF, EJB, JPA और अन्य सभी Java EE फैन्सीनेस का भी समर्थन करते हैं। यह भी देखें कि वास्तव में जावा ईई क्या है?


ग्रहण में सर्वर को एकीकृत करें और इसे परियोजना के साथ संबद्ध करें

एक बार एंटरप्राइज जावा और अपनी मशीन पर एक सर्वलेटक दोनों के लिए ग्रहण स्थापित करने के बाद, ग्रहण में निम्नलिखित चरण करें:

  1. ग्रहण में सर्वलेटेकर को एकीकृत करें

    ए। वाया सर्वर दृश्य

    • नीचे बॉक्स में सर्वर दृश्य खोलें ।
    • वहां राइट-क्लिक करें और नया> सर्वर चुनें
    • उपयुक्त सर्वलेटकनेक्टर चुनें और संस्करण बनाएं और विज़ार्ड के माध्यम से चलें।

      यहां छवि विवरण दर्ज करें

    ख। या, ग्रहण वरीयताओं के माध्यम से

    • विंडो खोलें > वरीयताएँ> सर्वर> रनटाइम वातावरण
    • आप यहां सर्वर जोड़ , संपादित और निकाल सकते हैं।

      यहां छवि विवरण दर्ज करें

  2. प्रोजेक्ट के साथ सहयोगी सर्वर

    ए। नए प्रोजेक्ट में

    • बाईं ओर प्रोजेक्ट नेविगेटर / एक्सप्लोरर खोलें ।
    • वहां राइट-क्लिक करें और नई> प्रोजेक्ट और फिर मेनू वेब> डायनामिक वेब प्रोजेक्ट चुनें
    • विज़ार्ड में, एकीकृत सर्वर पर लक्ष्य रनटाइम सेट करें।

      यहां छवि विवरण दर्ज करें

    ख। या, मौजूदा परियोजना में

    • राइटक्लिक प्रोजेक्ट और गुण चुनें ।
    • में लक्षित Runtimes अनुभाग, एकीकृत सर्वर चुनें।

      यहां छवि विवरण दर्ज करें

    किसी भी तरह से, ग्रहण तब निर्माण पथ में सर्वलेटकॉन के पुस्तकालयों को स्वचालित रूप से ले जाएगा। इस तरह आप सर्वलेट एपीआई का आयात और उपयोग कर पाएंगे।


कभी भी ढीले सर्वर-विशिष्ट JAR फ़ाइलों को न ले जाएँ

आपको किसी भी मामले में प्रोजेक्ट की बिल्ड पाथ प्रॉपर्टी के आसपास फिडेल करने की आवश्यकता नहीं होनी चाहिए । आप उपरोक्त सभी चाहिए कभी नहीं मैन्युअल रूप से कॉपी / डाउनलोड / स्थानांतरित / व्यक्ति servletcontainer विशेष पुस्तकालयों की तरह शामिल हैं servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jar, आदि यह केवल भविष्य पोर्टेबिलिटी, संगतता, classpath और रख-रखाव मुसीबतों का कारण बन, अपने webapp काम नहीं होता है जब यह है, क्योंकि एक अलग मेक / संस्करण के सर्वलेटकॉर्नर पर तैनात किया जाता है, जहां से उन पुस्तकालयों को मूल रूप से प्राप्त किया जाता है।

यदि आप मावेन का उपयोग कर रहे हैं, तो आपको यह पूरी तरह सुनिश्चित करने की आवश्यकता है कि सर्वलेटेनर-विशिष्ट लाइब्रेरी जो पहले से ही लक्ष्य रनटाइम द्वारा प्रदान की जाती हैं, के रूप में चिह्नित हैं <scope>provided</scope>

यहां कुछ सामान्य अपवाद है जो आप जब तुम कूड़े प्राप्त कर सकते हैं /WEB-INF/libया यहां तक कि /JRE/lib, /JRE/lib/ext, आदि एक लापरवाह संकलन त्रुटियों को ठीक करने की कोशिश में servletcontainer विशेष पुस्तकालयों के साथ:


4
@BalusC अगर मैं अपाचे चींटी का उपयोग अपनी परियोजना के निर्माण के लिए कर रहा हूं, तो मैं सर्वलेट कंटेनर के /lib(servlet-api.jar & jsp-api.jar) फ़ोल्डर को गतिशील रूप से कैसे शामिल करूं? या क्या मुझे हार्ड / कोड जैसे हार्ड <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
ड्राइव

1
@BalusC परावर्तनों के साथ मावेन प्रोजेक्ट क्यों बनाए गए maven-archetype-webappहैं जो सर्वलेट-एपी जार को एक निर्भरता के रूप में शामिल नहीं करते हैं? प्रोजेक्ट में संकलित त्रुटि के साथ एक index.jsp है। (एक्लिप्स लूना बिल्ड आईडी: 20140612-0600, JDK 8, M2eclipse)
arun

1
@arun servlet-apiनिर्भरता को टॉम्बैट, वाइल्डफ्लाय, ग्लासफिश आदि जैसे सर्वलेट रनटाइम वातावरण द्वारा प्रदान किया जाता है। इसे कभी भी अपने ऐप के हिस्से के रूप में शामिल न करें, क्योंकि इसकी पर्यावरण के साथ टकराव की अच्छी संभावना है।
asgs

@ बालसु, 1) क्या javax.servlet-api-3.1.0.jar बराबर है tomcat8 / lib / servlet-api.jar? मैं दो जार विघटित करता हूं, फिर पाते हैं कि वर्ग / इंटरफेस एक समान हैं। 2) क्या javax.servlet-api-3.1.0.jar कंटेनर-न्यूट्रल (सर्वलेटोकेर-विशिष्ट पुस्तकालय नहीं) है?
gfan

@gfan: तकनीकी समस्या यह नहीं है कि कंटेनर प्रदान की गई लाइब्रेरी "कंटेनर न्यूट्रल" हैं, बल्कि पूर्ववर्तीता और ऑर्डरिंग को लोड करना है। यदि कंटेनर प्रदान की गई लाइब्रेरी गलत क्लास लोडर (जैसे वेबएप क्लास लोडर) द्वारा लोड की जाती हैं, तो चीजें कहर हो सकती हैं, भले ही यह "संयोगवश" बिल्कुल एक ही संस्करण हो। बस कंटेनर प्रदान करने वाले पुस्तकालयों को कंटेनर के बाहर नकली स्थानों से प्रदान न करें। अवधि।
बालुस्क

220

आयात javax.servlet

चरण 1

अपनी परियोजना के गुणों पर जाएं (के साथ)Alt + Enterया righ- क्लिक के साथ)

चरण 2

टार्गेट रनटाइम के तहत Apache Tomcat v7.0 पर जाँच करें और यह काम करता है।


2
मुझे अपना JBOSS रनटाइम जोड़ने में मदद की। मेरी सूची खाली थी।
अवधि

2
मेरे लिए यही समाधान था। मैंने टॉमकट 6.0 को मेरी तैनाती पर्यावरण (ग्रहण में एक सर्वर के रूप में) के रूप में सेट किया था, लेकिन इसे मेरे रनवे एनवायरमेंट के रूप में निर्दिष्ट करने के लिए उपेक्षित किया गया ... मैं अनुमान लगा रहा हूं कि इसका मतलब यह हो सकता है कि मेरे टॉमटैट / लिबर फ़ोल्डर में रनटाइम में। लेकिन संकलन समय पर नहीं।
पॉल

धन्यवाद! लेकिन मैं म्यू सर्वर की प्रतियां कैसे हटा सकता हूं? मेरे पास Apache Tomcat v7.0 (2) और (3) है जिसे मैं हटाना चाहता हूं। किसी को पता है कैसे?
रॉबेन

समस्या से हल करने में मेरी मदद नहीं की The import javax.servlet cannot be resolved
मर्ग्लूम

1
यह काम! धन्यवाद, @mrgloom, आप सर्वर को हटाना चाहते हैं और अपने लोकलहोस्ट में एक नया सर्वर बना सकते हैं
फ्रेडी फेब्रेगास

81

हरि से थोड़ा अंतर:

प्रोजेक्ट पर राइट क्लिक करें ---> गुण ---> जावा बिल्ड पाथ ---> Add Library ... ---> सर्वर रनटाइम ---> Apache Tomcat ---- - समाप्त करें।


3
हाय ivanLam, Apache Tomcat सर्वर रनटाइम के बाद नहीं दिखा रहा है? अब क्या करे!
संदीप पट्टनायक

15

अपने सर्वर लिब फोल्डर से सर्वलेट-एपी.जर शामिल करें।यहां छवि विवरण दर्ज करें

यह कदम करो

यहां छवि विवरण दर्ज करें


1
समाधान मेरे लिए अभी भी काम नहीं कर रहा है नीचे त्रुटि हो रही है। java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException शुरू करने के दौरान एक चाइल्ड कंटेनर विफल हो गया: घटक शुरू करने में विफल [StandardEngine] [Catalina] .StandardHost [localhost]। मैसेंजर]]
माया मोहित

13

Pom.xml में javax.servlet निर्भरता जोड़ें। आपकी समस्या का समाधान किया जाएगा।

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

12

क्विक फिक्स- यह एक्लिप्स में काम करता है - प्रोजेक्ट पर राइट क्लिक -> गुण -> जावा बिल्ड पाथ (टैब) -> एक्सटर्नल JARs जोड़ें -> सर्वलेट एपी जार कार्यान्वयन (यदि टॉमकैट - इसका नाम सर्वलेट-एपीजे।) -> खोजें ओके पर क्लिक करें। बस !!


14
करने के लिए BalusC पोस्ट के ऊपर कभी नहीं मैन्युअल रूप से कॉपी संदर्भ के साथ / डाउनलोड / स्थानांतरित / जैसे व्यक्तिगत servletcontainer विशेष पुस्तकालयों में शामिल हैं servlet-api.jar, jsp-api.jar, el-api.jaआर, j2ee.jar, javaee.jar, आदि यह केवल भविष्य पोर्टेबिलिटी, संगतता, classpath और रख-रखाव परेशानियों के लिए नेतृत्व करेंगे।
अनिकेत कुलकर्णी

5

आप बस servlet-api.jarउस जार फ़ाइलों को कॉपी कर सकते हैं जो कि lib फ़ोल्डर में है, जो WEB-INF में है। फिर बस अपनी परियोजना को साफ और निर्मित करें, आपकी त्रुटियां हल हो जाएंगी।

  **OR**

आप सीधे निम्नलिखित चरणों का उपयोग करके लाइब्रेरी में जार फ़ाइलों को जोड़ सकते हैं।

  1. प्रोजेक्ट पर राइट क्लिक करें।
  2. गुणों पर जाएं।
  3. जावा बिल्ड पाथ पर जाएं।
  4. टैब से Add Library विकल्प चुनें।
  5. जार फाइलें जोड़ें
  6. अपनी राह दो servlet-api.jar फ़ाइल ।
  7. अपने प्रोजेक्ट को साफ करें और उसका निर्माण करें।

BalusC पद और अनिकेत कुलकर्णी टिप्पणी ऊपर करने के लिए, Downvoting संदर्भ के साथ, कभी नहीं मैन्युअल रूप से कॉपी / डाउनलोड / स्थानांतरित / जैसे व्यक्तिगत servletcontainer विशेष पुस्तकालयों में शामिल हैं servlet-api.jar, jsp-api.jar, javaee.jar, आदि यह केवल भविष्य पोर्टेबिलिटी, संगतता, classpath और रख-रखाव परेशानियों के लिए नेतृत्व करेंगे।
एल-टेदी

5

मुझे पता है यह एक पुरानी पोस्ट है। हालाँकि, मैंने एक और उदाहरण देखा जहां परियोजना में पहले से ही टॉमकैट जोड़ा गया है लेकिन हमें अभी भी यह त्रुटि मिलती है। क्या यह हल करने के लिए किया गया था:
Alt + Enter
प्रोजेक्ट पहलू
दाईं ओर, विवरण के बगल में, एक और टैब "Runtimes" है। स्थापित टॉमकैट सर्वर को वहां सूचीबद्ध किया जाएगा। इसे सेलेक्ट करें।
विन्यास और पूरा बचाओ!

आशा है कि यह किसी की मदद करता है।


3

से विकिपीडिया

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

यह, निश्चित रूप से, केवल तभी काम करता है जब आपने servlet-api.jarग्रहण बिल्ड पथ में जोड़ा हो । आमतौर पर आपके एप्लिकेशन सर्वर (जैसे टॉमकैट ) में सही जार फ़ाइल होगी।


3

मावेन परियोजनाओं के लिए निम्न निर्भरता जोड़ें:

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

संदर्भ

एकल परियोजनाओं के लिए:

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

या javax.servlet.jarअपने प्रोजेक्ट में डाउनलोड और जोड़ें।


2

मुझे "डायनेमिक वेब मॉड्यूल" से संबंधित प्रोजेक्ट निर्माण के दौरान एक शून्य सूचक अपवाद मिल रहा था।

परियोजना को संकलित करने के लिए (अर्थात, javax.servletसफलतापूर्वक आयात करने के लिए) मुझे परियोजना के गुणों पर जाना होगा , साइडबार में प्रोजेक्ट पहलुओं को चुनना होगा , डायनामिक वेब मॉड्यूल पर टिक करना होगा और आवेदन करना होगा।

हैरानी की बात यह है कि इस बार "डायनेमिक वेब मॉड्यूल" पहलू ने सही तरीके से स्थापित किया, और आयात ने काम करना शुरू कर दिया।


2

मेरे मामले में, जब मैं लक्षित रनटाइम्स , स्क्रीन पर गया, तो टॉमकैट 7 स्थापित होने के बावजूद सूचीबद्ध (अक्षम) नहीं था।

ठीक करने के लिए मुझे जाना पड़ा प्राथमिकताएँ-> सर्वर-> रनटाइम एनवायरनमेंट और फिर टॉमकैट 7 को अनइंस्टॉल और रीइंस्टॉल करना होगा।


2

हम में से कई ग्रहण में मावेन परियोजना के माध्यम से विकसित होते हैं। यदि हां, तो आप मावेन में टॉमकट निर्भरताओं को जार tomcat-servlet-apiऔर tomcat-jsp-apiजार के माध्यम से शामिल कर सकते हैं । टॉमकैट के प्रत्येक संस्करण के लिए एक मौजूद है। आमतौर पर इन्हें स्कोप के साथ जोड़ा जाता हैprovided अपने POM के पर्याप्त होता है। यह आपके बिल्ड को अधिक पोर्टेबल रखेगा।

यदि आप भविष्य में टॉमकैट को अपग्रेड करते हैं, तो आप बस इन जार के संस्करण को भी अपडेट करते हैं।


0

आपको उपरोक्त सभी को कभी भी मैन्युअल रूप से कॉपी / डाउनलोड / स्थानांतरित नहीं करना चाहिए / इसमें सर्वलेट-एपीआई जैसे व्यक्तिगत सर्वलेटकॉन्सर-विशिष्ट लाइब्रेरी शामिल हैं।

@BalusC,

मैं उन सटीक कक्षाओं का उपयोग करना पसंद करूंगा, जो मेरा आवेदन एक्लिप्स (जब मैं एक पागल डेवलपर की तरह महसूस कर रहा हूं) द्वारा प्रदान किए गए एक के बजाय उपयोग करने जा रहा हूं।

एक अन्य उपाय यह होगा कि ग्रहण "कॉन्फ़िगर पथ का निर्माण करें"> पुस्तकालय> बाहरी जार जोड़ें, और जो भी कंटेनर उपयोग करने के लिए चुनता है उसका सर्वलेट एप जोड़ें।

और निर्माण के लिए चींटी का उपयोग करते समय @kaustav datta के समाधान का पालन करें - एक संपत्ति जैसे कि tomcat.home या weblogic.home। हालाँकि यह एक और अड़चन पेश करता है कि अगर डेवलपर वेबलॉग का उपयोग कर रहा है, तो उसे अपनी स्थानीय मशीन पर वेबलॉग स्थापित करना चाहिए! कोई अन्य क्लीनर समाधान?


0

यह भी कारण हो सकता है। मैं निम्नलिखित के साथ आया हूं 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>

अनसुलझे मुद्दे के बहिष्कार के कारण था spring-boot-starter-tomcat। बस <exclusions>...</exclusions>निर्भरता को हटा दें यह समस्या को सुलझा देगा, लेकिन सुनिश्चित करें कि ऐसा करने से एम्बेडेड टोमैट सर्वर को भी बाहर रखा जाएगा।

यदि आपको एम्बेडेड टॉमकैट सर्वर की आवश्यकता है, तो आप उसी निर्भरता को जोड़ सकते हैं compile scope

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>compile</scope>
</dependency>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.