2016-02-08 22 views
3

我剛剛發現我是如何暗潮作品,並通過其API驚訝:有沒有辦法在Undertow中使用Servlet API?

Undertow server = Undertow.builder() 
       .addHttpListener(8080, "localhost") 
       .setHandler(new HttpHandler() { 
        @Override 
        public void handleRequest(final HttpServerExchange exchange) throws Exception { 
         exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain"); 
         exchange.getResponseSender().send("Hello World"); 
        } 
       }).build(); 
     server.start(); 

有沒有使用更方便Servlet API的這樣莫名其妙的方式?

Undertow server = Undertow.builder() 
       .addHttpListener(8080, "localhost") 
       .setHandler(new HttpHandler() { 
        @Override 
        public void handleRequest(final HttpServletRequest request, final HttpServletResponse response) throws Exception { 
         // ... 
        } 
       }).build(); 
     server.start(); 

我試圖做到的,是要替換當前工作碼頭容器,由暗潮,但閱讀文檔和源之後,我似乎無法使用Servlet API中找到一個方法來做到所以。我沒有使用.war文件,只是一個嵌入式Jetty。有人有任何指針嗎?

+1

「創建Servlet部署」,位於http://undertow.io/undertow-docs/undertow-docs-1.3.0/index.html#undertow-servlet? – BalusC

+0

正如我所說我沒有.war文件,我只想將Undertow集成到使用servlet api類(請求和響應)的現有框架(spark web框架)中。 –

+0

呃,它說你需要一個.war文件在哪裏? 「部署名稱」!=「物理戰爭文件」。 – BalusC

回答

4

它被記錄在部分Creating a Servlet Deployment。這裏有一個基於文檔提供的MCVE,你已經有了dependencies以及Servlet API。

package com.stackoverflow.q35269763; 

import io.undertow.Handlers; 
import io.undertow.Undertow; 
import io.undertow.server.handlers.PathHandler; 
import io.undertow.servlet.Servlets; 
import io.undertow.servlet.api.DeploymentInfo; 
import io.undertow.servlet.api.DeploymentManager; 

import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class Test { 

    public static void main(String... args) throws Exception { 
     DeploymentInfo servletBuilder = Servlets.deployment().setClassLoader(Test.class.getClassLoader()) 
      .setDeploymentName("myapp").setContextPath("/myapp") 
      .addServlets(Servlets.servlet("myservlet", 
       new HttpServlet() { 
        @Override 
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
         response.getWriter().write("Hello World!"); 
        } 
       }.getClass()).addMapping("/myservlet")); 
     DeploymentManager manager = Servlets.defaultContainer().addDeployment(servletBuilder); 
     manager.deploy(); 
     PathHandler path = Handlers.path(Handlers.redirect("/myapp")).addPrefixPath("/myapp", manager.start()); 
     Undertow server = Undertow.builder().addHttpListener(8888, "localhost").setHandler(path).build(); 
     server.start(); 
    } 

} 

當您在copy'n'paste'n'running上面的代碼後,你最喜歡的網頁瀏覽器打開http://localhost:8888/myapp/myservlet,你會看到

的Hello World!

相關問題