【发布时间】:2016-02-15 08:45:01
【问题描述】:
我是使用 undertow 的新手,我正在开发一个独立的应用程序,将其用作嵌入式服务器。我希望我可以在我的嵌入式 undertow 中部署 web sockets、servlet 和 restfull htmls 服务。
到目前为止,我只使用 web 套接字和 servlet 完成了测试,每个单独的功能都正确的问题,但是如果我删除 servlet 页面,我不会从带有 HTML 和 JavaScript 的测试页面访问的 web 套接字部署它们nigun 测试运行没有错误。
这是我的代码:
/*
* Create the appWebSocketDeploymentInfo and configure
*/
WebSocketDeploymentInfo appWebSocketDeploymentInfo = new WebSocketDeploymentInfo();
appWebSocketDeploymentInfo.setBuffers(new ByteBufferSlicePool(BufferAllocator.BYTE_BUFFER_ALLOCATOR, 17000, 17000 * 16));
appWebSocketDeploymentInfo.addEndpoint(WebSocketEndpoint1.class);
appWebSocketDeploymentInfo.addEndpoint(WebSocketEndpoint2.class);
/*
* Create the appDeploymentInfo and configure
*/
DeploymentInfo appDeploymentInfo = Servlets.deployment()
.setClassLoader(Server.class.getClassLoader())
.setContextPath("/myapp)
.setDeploymentName("app.war")
.setResourceManager(new FileResourceManager(new File("src/main/webapp"), 1024))
.addServlets(Servlets.servlet("HomeServlet", HomeServlet.class).addMapping("/home"))
.setResourceManager(new ClassPathResourceManager(Server.class.getClassLoader(), Server.class.getPackage()))
.addServletContextAttribute(WebSocketDeploymentInfo.ATTRIBUTE_NAME, appWebSocketDeploymentInfo);
/*
* Create the deploymentManager
*/
deploymentManager = Servlets.defaultContainer().addDeployment(appDeploymentInfo);
/*
* Deploy the app
*/
deploymentManager.deploy();
/*
* Create the path handle
*/
pathHandler = Handlers.path(Handlers.redirect("/myapp/home")).addPrefixPath("/myapp", deploymentManager.start());
/*
* Create the server
*/
undertowServer = Undertow.builder().addHttpListener(DEFAULT_PORT, DEFAULT_IP).setHandler(pathHandler).build();
javascript日志错误是
WebSocket 连接到“ws://localhost:8080/fermat/node-channel”失败:WebSocket 握手期间出错:意外响应代码:404
【问题讨论】:
-
不是你的问题的真正答案,而是更多的提示:你有没有想过为此使用 Spring Boot ?它也支持 Undertow,并且会以自动方式处理您手动执行的操作。
-
谢谢,不过我对spring了解不多,实在不想用。