2015-05-21 10 views
6

मैं दोनों HTTPServer और REST हैंडलर चलाने की कोशिश कर रहा हूं। एक समय में केवल एक ही काम एक ही समय में दोनों को काम करने में सक्षम नहीं है। मुझे एचटीएमएल पेज और एपीआई की सेवा करने की ज़रूरत है।HTTP हैंडलर और रीस्टेसी परिनियोजन उपक्रम और विश्राम के साथ

यहां मेरा कोड है।

public class HttpServer { 

    private final UndertowJaxrsServer server = new UndertowJaxrsServer(); 
    private static String rootPath = System.getProperty("user.dir"); 

    private final Undertow.Builder serverBuilder; 

    public HttpServer(Integer port, String host) { 
     serverBuilder = Undertow 
       .builder() 
       .addHttpListener(port, host) 
       .setHandler(
         Handlers.path().addPrefixPath(
           "/", 
           Handlers.resource(
             new FileResourceManager(new File(
               rootPath + "/web"), 100)) 
             .addWelcomeFiles(
               rootPath + "/web/index.html"))); 
     server.start(serverBuilder); 
    } 

    public DeploymentInfo deployApplication(String appPath, 
      Class<? extends Application> applicationClass) { 
     ResteasyDeployment deployment = new ResteasyDeployment(); 
     deployment.setApplicationClass(applicationClass.getName()); 
     return server.undertowDeployment(deployment, appPath); 
    } 

    public void deploy(DeploymentInfo deploymentInfo) throws ServletException { 
     server.deploy(deploymentInfo); 
    } 

    public static void main(String[] args) throws ServletException { 
     HttpServer myServer = new HttpServer(8080, "0.0.0.0"); 

     DeploymentInfo di = myServer 
       .deployApplication("/rest", MyApplication.class) 
       .setClassLoader(HttpServer.class.getClassLoader()) 
       .setContextPath("/my").setDeploymentName("My Application"); 
     myServer.deploy(di); 
    } 
} 
+0

पर मैं एक ही सामना करना पड़ रहा पर उपलब्ध होगा कर सकते हैं मुद्दा। क्या आपने एक कामकाज निकाला है? – yyff

उत्तर

4

UndertowJaxrsServer अपने बिल्डर के filehandler अधिभावी है:

public UndertowJaxrsServer start(Undertow.Builder builder) 
{ 
    server = builder.setHandler(root).build(); 
    server.start(); 
    return this; 
} 

लगता है वहाँ UndertowJaxrsServer के लिए एक और हैंडलर पारित करने के लिए कोई रास्ता नहीं है की तरह। संभावित कामकाज हो सकता है:

  • एक संसाधन वर्ग के साथ एक और एप्लिकेशन को तैनात करें जो बस फाइलों परोसता है।
  • रिक्त अंडरटेव का उपयोग करें और आसान जेएक्स-आरएस तैनाती के आराम को खो दें।
+0

हाय, मुझे एक ही समस्या का सामना करना पड़ रहा है। मैं "रिक्त अंडरटेव का उपयोग कैसे कर सकता हूं और आसान जेएक्स-आरएस तैनाती के आराम को खो सकता हूं"? – yyff

+0

पहले वर्कअराउंड के लिए "एक संसाधन वर्ग के साथ एक और एप्लिकेशन को तैनात करें जो केवल फाइलों की सेवा करता है।", यह कैसे काम करेगा? यदि दो अनुप्रयोग चलाते हैं, तो वे अलग-अलग पोर्ट नंबरों को सुनेंगे, है ना? – yyff

0

संस्करण 3.1.0.Beta2 से और उच्च तुम कोशिश इस

UndertowJaxrsServer server = new UndertowJaxrsServer(); 

ResteasyDeployment deployment = new ResteasyDeployment(); 

deployment.setApplicationClass(ExampleApplication.class.getName()); 

DeploymentInfo deploymentInfo = server.undertowDeployment(deployment, "/"); 
deploymentInfo.setClassLoader(MyServer.class.getClassLoader()); 

deploymentInfo.setContextPath("/api"); 

server.deploy(deploymentInfo); 

server.addResourcePrefixPath("/", 
     resource(new PathResourceManager(Paths.get(STATIC_PATH),100)). 
      addWelcomeFiles("index.html")); 

server.start(); 

RestEasy एप्लिकेशन/api/* और स्थैतिक फ़ाइलें/*

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