2016-02-08 83 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!

相关问题