एक वेब इंटरफ़ेस बनाने के लिए एम्बेडेड जेटी का उपयोग करना

मैं वेब विकास पर और एम्बेडेड जेटी का उपयोग करने में नौसिखिया हूं। नीचे प्रस्तुत स्रोत कोड ग्रहण आईडीई का उपयोग करके विकसित किया गया है। मुझे जेटी सर्वर प्रोग्रामेटिक रूप से शुरू करना है, मेरे पास कमांड लाइन के माध्यम से इसे शुरू करने का विकल्प नहीं है। इसे एक बेहद हल्का वजन वाला वेब इंटरफ़ेस होना चाहिए क्योंकि इसे कम स्मृति/प्रसंस्करण गति वाले सिस्टम से लॉन्च किया जाएगा।

मैंने ईसीएलआईपीएसई में निम्नलिखित निर्देशिका संरचना विकसित की है

  JettyExample 
    src 
     sample_package
        HelloWorld.java
     WEB-INF
      index.html
      web.xml

HelloWorld.java का स्रोत कोड

 public static void main(String[] args) throws Exception
{

    Server server = new Server(8080);
    ResourceHandler resource_handler = new ResourceHandler();
    resource_handler.setDirectoriesListed(true);
    resource_handler.setResourceBase(args.length == 2?args[1]:".");
    resource_handler.setWelcomeFiles(new String[]{ "WEB-INF/index.html" });


    System.out.println("serving " + resource_handler.getBaseResource());

    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() });
    server.setHandler(handlers);
    server.start();
    server.join();

}

index.html है

 <html>
<head>
    <title>HTML Generator Sample Page</title>
</head>
<body>
    

Agent Management Interface

    
  1. Start Platform
  2. Show Agent Status
  3. Create Dummy Agent
  4. Intiate Request Message
  5. Stop agent
  6. Stop Platform
    
Enter option :

<input name="option_selector" type="submit" value="option_selector" /> </body>

web.xml फ़ाइल स्वागत फ़ाइलों की सूची के साथ सामान्य है। जब मैं सर्वर चलाता हूं और लॉन्च करता हूं localhost: वेब ब्राउज़र में 8080, मुझे 404 त्रुटि मिल रही है मुझे यकीन नहीं है कि मुझे वेब.एक्सएमएल फ़ाइल में जोड़ने की ज़रूरत है या web.xml फ़ाइल का रिफ्रेंसिंग HelloWorld.java मुख्य में सही नहीं है तरीका।

कोई संकेत/सुझाव उपयोगी होंगे संपादित करें 1:

मैं क्लासपाथ में server-api.jar फ़ाइल और jetty.jar फ़ाइल भी शामिल कर रहा हूं और ग्रहण के लिए मेवेन प्लगइन का उपयोग नहीं कर रहा हूं।

EDIT2:

2012-05-25 14:40:39.253:DBUG:oejs.AsyncHttpConnection:async request (null null)@17160330 [email protected]
2012-05-25 14:40:39.260:DBUG:oejs.Server:REQUEST/on   org.eclipse.jett[email protected][email protected]:8080<->127.0.0.1:55062
2012-05-25 14:40:39.264:DBUG:oejs.Server:RESPONSE/ 200
2012-05-25 14:40:39.267:DBUG:oejs.AsyncHttpConnection:async request (null null)@17160330 [email protected]
2012-05-25 14:40:39.272:DBUG:oejs.AsyncHttpConnection:async request (null null)@17160330 [email protected]
2012-05-25 14:40:39.273:DBUG:oejs.Server:REQUEST /jetty-dir.css on org.eclipse.jett[email protected][email protected]:8080<->127.0.0.1:55062
2012-05-25 14:40:39.275:DBUG:oejs.Server:RESPONSE /jetty-dir.css  404
5
जोड़ा संपादित
विचारों: 1
@ अभिषेक बोस मैं निर्देशिका संरचना देख सकता हूं, केवल जब मैं लोकलहोस्ट टाइप करता हूं: 8080/src/WEB-INF मैं index.html पृष्ठ से HTML पृष्ठ देख सकता हूं
जोड़ा लेखक bhavs, स्रोत
अगर आप फ़ाइल के पूरे पथ में टाइप करते हैं, तो क्या यह अभी भी आपको त्रुटि दे रहा है?
जोड़ा लेखक BOSS, स्रोत

1 उत्तर

आपने अपनी स्वागत फ़ाइल को WEB-INF/index.html पर सेट कर दिया है। वेब-आईएनएफ फ़ोल्डर के अंदर स्थित आइटम केवल सर्वलेट कंटेनर के लिए दृश्यमान होते हैं और कंटेनर के बाहर पहुंच योग्य नहीं होते हैं।

यह काम नहीं करेगा, क्योंकि index.html वेब-आईएनएफ के पीछे छिपा हुआ है। इसके अतिरिक्त, जब वेब-आईएनएफ के साथ काम करते हैं, तो इसे एप्लिकेशन की जड़ से एक्सेस करने के लिए प्रथागत है, जैसे /WEB-INF/file.html:

resource_handler.setWelcomeFiles(new String[]{ "WEB-INF/index.html" });

यदि आप केवल index.html फ़ाइल को स्वागत फ़ाइल के रूप में शामिल करते हैं, और यह भी सुनिश्चित करें कि index.html आपके एप्लिकेशन की जड़ में है, तो जेटी सर्वर इसे ढूंढने में सक्षम होना चाहिए:

resource_handler.setWelcomeFiles(new String[]{ "index.html" });

इस बदलाव के बाद जेटी को पुनरारंभ करना सुनिश्चित करें, क्योंकि एप्लिकेशन को इस जानकारी को फिर से लोड करने की आवश्यकता होगी।

साथ ही, सर्वर पर किसी नए वेब एप्लिकेशन को कॉन्फ़िगर करते समय, आमतौर पर अपने लॉगिंग स्तर को सभी तरह से चालू करना एक अच्छा विचार है। सर्वर और ढांचे आमतौर पर निम्न स्तर पर लॉग इन करते हैं ताकि वे एप्लिकेशन लॉग में हस्तक्षेप न करें; हालांकि, इस मामले में, आपको यह देखने की ज़रूरत है कि जब आप स्थानीय ब्राउज़र लोड करते हैं, तो आपके ब्राउज़र में 8080 लोड करने पर सर्वलेट कंटेनर किस संसाधन तक पहुंचने का प्रयास कर रहा है।

आगे स्पष्टीकरण के लिए, ResourceHandler.setWelcomeFiles जावा विधि निम्न xml प्रविष्टि का उपयोग करते हुए, गैर-एम्बेडेड जेटी में web.xml के माध्यम से सर्वर को कॉन्फ़िगर करने जैसा ही है:

    
            index.html
    

एम्बेडिंग जेटी पर ग्रहण विकी पेज पर कुछ उदाहरण और अधिक दस्तावेज हैं, सुनिश्चित करें कि अधिक मार्गदर्शन के लिए उन्हें देखें।

एम्बेडेड जेटी 6 की फ़ाइल संरचना:

मेरे पास एम्बेडेड जेट्टी की एक प्रति की एक उदाहरण फ़ाइल संरचना है जो मेरे पास है। ध्यान दें कि index.html रूट में है, ठीक है src के बगल में:

build.properties*  index.html*  README.textile*  src/   war/
build.xml*         licenses/    server/          test/  WEB-INF/
2
जोड़ा
इस परिवर्तन के बाद भी लॉगिंग स्तर को बदलने के सुझाव के लिए धन्यवाद, जब मैं लोकलहोस्ट टाइप करता हूं: 8080 अब मैं अपने कोड बेस की निर्देशिका संरचना देखता हूं, जब मैं src/WEB-INF फ़ोल्डर पर क्लिक करता हूं तो मैं देख सकता हूं कि मेरे पास HTML पृष्ठ है बनाया था। लॉगिंग स्तर को बढ़ाने से लॉग संदेश के साथ मैं प्रश्न अपडेट कर दूंगा
जोड़ा लेखक bhavs, स्रोत
आपके सुझाव के लिए धन्यवाद, इससे मदद मिली, मैं अब पेज देख सकता हूं
जोड़ा लेखक bhavs, स्रोत
ठीक। index.html को उसी फ़ोल्डर में src के रूप में ले जाएं - इसलिए वे भाई बहन हैं। आपकी index.html फ़ाइल जेटी की तलाश में 2 स्तर गहरा है। साथ ही, तथ्य यह है कि वेब-आईएनएफ दृश्यमान है, यह बताता है कि कॉन्फ़िगरेशन फ़ाइलों में से कोई भी कुछ भी नहीं कर रहा है, क्योंकि कंटेनर सामान्य रूप से डिफ़ॉल्ट रूप से उन्हें छुपाता है। लेकिन यह ठीक है क्योंकि आप xml फ़ाइलों के बजाय प्रोग्रामेटिक रूप से कॉन्फ़िगर कर रहे हैं ...
जोड़ा लेखक jmort253, स्रोत
आपका बहुत - बहुत स्वागत है। सौभाग्य! :)
जोड़ा लेखक jmort253, स्रोत