2013-11-26 6 views
10

में वैकल्पिक पथ से स्थैतिक फ़ाइलों की सेवा करना मैं एक कस्टम सर्वलेट के साथ एक एम्बेडेड जेटी सर्वर बनाने की कोशिश कर रहा हूं जो कुछ गतिशील डेटा प्रदान करता है, और डिफ़ॉल्ट सर्वलेट जो कुछ छवियों की सेवा करेगा। मेरे पास कस्टम सर्वलेट काम कर रहा है, लेकिन मैं छवि फ़ाइलों की सेवा के लिए एक डिफ़ॉल्ट सर्वलेट जोड़ने का तरीका नहीं समझ सकता।एम्बेडेड जेटी

यह है कि मैं क्या है ...

private void setUpServer(ServerOptions options){ 
    s = new Server(options.getPort()); 
    this.options = options; 
    context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
    context.setContextPath("/"); 
    s.setHandler(context); 
    context.addServlet(new ServletHolder(new DataServlet()), "/data/*"); 
    context.addServlet(new ServletHolder(new DefaultServlet()), "/pictures/*"); 
} 

मैं समझ नहीं DefaultServlet कॉन्फ़िगर कैसे एक फ़ाइल सर्वर के रूप में काम करने के लिए और अभी भी कस्टम DataServelet अभी भी काम किया है।

क्या किसी के पास कोई विचार है?

उत्तर

28

तुम क्या जरूरत है:

  1. एक "/"
    • इस "डिफ़ॉल्ट" के नाम पर रखा गया डिस्पैचर पर होना चाहिए (अनुशंसित, यह सर्वलेट कल्पना की एक आवश्यकता है) (एक और आवश्यकता पर DefaultServlet सर्वलेट कल्पना) के
  2. अपने कस्टम स्थैतिक सामग्री के साथ एक वैकल्पिक DefaultServlet, init-पैरामीटर के द्वारा विन्यस्त
    • "डिफ़ॉल्ट" के अलावा किसी अन्य नामित डिस्पैचर का उपयोग
    • आप ServletHolder.setInitParameter(name,value) उपयोग कर सकते हैं पूरा करने के लिए (अन्य सर्वलेट कल्पना सुविधाओं के बीच एक नाम टक्कर से बचने के लिए) इस
    • आप true को pathInfoOnly पैरामीटर सेट न भूलें (चारों ओर पाने के लिए डिस्पैचर नामक "डिफ़ॉल्ट" के लिए विशेष मामले)
  3. गतिशील सामग्री की सेवा करने के लिए स्वयं का एक सर्वलेट।

AltDefaultServlet.java

package jetty.demo; 

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.server.ServerConnector; 
import org.eclipse.jetty.servlet.DefaultServlet; 
import org.eclipse.jetty.servlet.ServletContextHandler; 
import org.eclipse.jetty.servlet.ServletHolder; 

public class AltDefaultServlet 
{ 
    public static void main(String[] args) 
    { 
     System.setProperty("org.eclipse.jetty.LEVEL","INFO"); 

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

     // The filesystem paths we will map 
     String homePath = System.getProperty("user.home"); 
     String pwdPath = System.getProperty("user.dir"); 

     // Setup the basic application "context" for this application at "/" 
     // This is also known as the handler tree (in jetty speak) 
     ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
     context.setResourceBase(pwdPath); 
     context.setContextPath("/"); 
     server.setHandler(context); 

     // add a simple Servlet at "/dynamic/*" 
     ServletHolder holderDynamic = new ServletHolder("dynamic", DynamicServlet.class); 
     context.addServlet(holderDynamic, "/dynamic/*"); 

     // add special pathspec of "/home/" content mapped to the homePath 
     ServletHolder holderHome = new ServletHolder("static-home", DefaultServlet.class); 
     holderHome.setInitParameter("resourceBase",homePath); 
     holderHome.setInitParameter("dirAllowed","true"); 
     holderHome.setInitParameter("pathInfoOnly","true"); 
     context.addServlet(holderHome,"/home/*"); 

     // Lastly, the default servlet for root content (always needed, to satisfy servlet spec) 
     // It is important that this is last. 
     ServletHolder holderPwd = new ServletHolder("default", DefaultServlet.class); 
     holderPwd.setInitParameter("dirAllowed","true"); 
     context.addServlet(holderPwd,"/"); 

     try 
     { 
      server.start(); 
      server.dump(System.err); 
      server.join(); 
     } 
     catch (Throwable t) 
     { 
      t.printStackTrace(System.err); 
     } 
    } 

} 
+0

यह पूरी तरह से काम किया। धन्यवाद!!!!!!!!! – user3034643

+0

यह काम करता है ... अंततः कुछ बर्बाद घंटे के बाद। धन्यवाद!!! – thisarattr

+0

यह एम्बेडेड जेट्टी संस्करण 9.4 के साथ मेरा मुद्दा तय करता है, धन्यवाद @ जोकाइम एरडफेल –

संबंधित मुद्दे