2012-04-23 10 views
46

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

मैंने निम्नलिखित में बदलाव की कोशिश की है, लेकिन मुझे 404 मिलते रहेंगे।

ServletContextHandler context = 
         new ServletContextHandler(ServletContextHandler.SESSIONS); 
context.setContextPath("/"); 

context.getInitParams().put(
         "org.eclipse.jetty.servlet.Default.resourceBase", "html"); 
context.addServlet(new ServletHolder(new DefaultServlet()), "/html"); 

Server jetty = new Server(8080); 
jetty.setHandler(context); 

jetty.start(); 

अद्यतन: यहाँ एक समाधान जेट्टी ट्यूटोरियल में बताया गया है। के रूप में सही जवाब में बताया गया है, यह एक ServletContextHandler के बजाय एक ResourceHandler उपयोग करता है:

Server server = new Server(); 
    SelectChannelConnector connector = new SelectChannelConnector(); 
    connector.setPort(8080); 
    server.addConnector(connector); 

    ResourceHandler resource_handler = new ResourceHandler(); 
    resource_handler.setDirectoriesListed(true); 
    resource_handler.setWelcomeFiles(new String[]{ "index.html" }); 

    resource_handler.setResourceBase("."); 

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

    server.start(); 
    server.join(); 
+0

pom.xml फ़ाइल है कि इस के साथ काम करता है: https://code.google.com/p/ram-badger/source/browse/trunk/static-jetty/pom। xml – cwash

+1

यह जेटी 9 के साथ काम नहीं कर रहा है ... –

+1

यदि कोई जेटी 9 @see के साथ एक ही समस्या का सामना करता है - http://stackoverflow.com/questions/28346438/resourcehandler-stop-hosting-files-with-jetty -9-404-नहीं मिला-त्रुटि-कार्य-फिन –

उत्तर

30

एक ResourceHandlerServletContextHandler के बजाय का उपयोग करें।

+1

दरअसल ... http://jetty.codehaus.org/jetty/jetty-6/apidocs/org/mortbay/jetty/handler/ResourceHandler.html –

+4

वह चाल है! धन्यवाद दोस्तों! कोड जेटी ट्यूटोरियल में भी दिया गया है। रवींद्र! http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty#Configuring_a_File_Server – HolySamosa

+1

यदि आपको javax.servlet की आवश्यकता है तो भी आप 'ServletContextHandler' का उपयोग करना चाहेंगे।फ़िल्टर (विवरण के लिए, कृपया नीचे मेरी टिप्पणी देखें) – xorcus

18

ResourceHandler का उपयोग करके स्थिर सामग्री की सेवा करने और DefaultServlet (ServletContextHandler के साथ) का उपयोग करके स्थिर सामग्री में एक महत्वपूर्ण अंतर है।

एक ResourceHandler (या एक HandlerList कई पकड़े ResourceHandler उदाहरण) जब एक संदर्भ हैंडलर के रूप में सेट किया गया है, यह सीधे अनुरोध संसाधित करता है और किसी भी पंजीकृत javax.servlet.Filter उदाहरणों पर ध्यान नहीं देता।

यदि आपको फ़िल्टर की आवश्यकता है, तो इसके बारे में जाने का एकमात्र तरीका ServletContextHandler का उपयोग कर रहा है, इसमें फ़िल्टर जोड़ना, फिर DefaultServlet जोड़ना और अंत में, आधार Resource सेट करना।

आधार Resource एक संसाधनबेस पथ का प्रतिनिधित्व करता है ResourceHandler के साथ शुरू किया जाएगा। एकाधिक निर्देशिका से निश्चित संसाधनों की सेवा करते हैं, तो एक ResourceCollection का उपयोग (जो अभी भी एक Resource है) और resourceBase तार की एक सरणी के साथ आरंभ:

ResourceCollection resourceCollection = new ResourceCollection(); 
resourceCollection.setResources(getArrayOfResourceBaseDirs()); 
12

मेरे छोटे वेब सर्वर में मैं दो फ़ाइलों, एक index.html और एक info.js है /src/webapp के तहत खोजें और मैं चाहता हूं कि उन्हें एम्बेडेड जेट्टी वेब सर्वर से परोसा जाए।

इस प्रकार मैं स्थिर सामग्री के साथ समस्या को हल करता हूं।

Server server = new Server(8080); 

ServletContextHandler ctx = new ServletContextHandler(); 
ctx.setContextPath("/"); 

DefaultServlet defaultServlet = new DefaultServlet(); 
ServletHolder holderPwd = new ServletHolder("default", defaultServlet); 
holderPwd.setInitParameter("resourceBase", "./src/webapp/"); 

ctx.addServlet(holderPwd, "/*"); 
ctx.addServlet(InfoServiceSocketServlet.class, "/info"); 

server.setHandler(ctx); 

एक आकर्षण की तरह काम किया!

+2

देखें क्या आप इस प्रश्न को देख सकते हैं - http://stackoverflow.com/questions/39011587/jetty-files-outside-war-and-context –

2

मैं web.xml में "सीएसएस" निर्देशिका के लिए मैपिंग जोड़कर कुछ हासिल करने में कामयाब रहा। स्पष्ट रूप से DefaultServlet उपयोग करने के लिए यह कह रही:

<servlet> 
    <servlet-name>DefaultServlet</servlet-name> 
    <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>DefaultServlet</servlet-name> 
    <url-pattern>/css/*</url-pattern> 
</servlet-mapping> 
संबंधित मुद्दे