首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WebSocketEndpoints文件中映射web.xml

在WebSocketEndpoints文件中映射web.xml
EN

Stack Overflow用户
提问于 2013-11-21 17:23:54
回答 1查看 9.2K关注 0票数 6

我正在尝试开发一个使用websocket端点并将其部署到Jetty服务器上的Java 7 web应用程序。

应用程序具有以下结构:

代码语言:javascript
复制
Game/
  src/
    main/
      java/
        game/
          WebSocketEndpoint.java
      webapp/
        index.html
        scripts/
          variousjavascriptstuff.js
        WEB-INF/
          beans.xml
          web.xml

在beans.xml文件中:

代码语言:javascript
复制
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
   bean-discovery-mode="annotated">

WebSocketEndpoint被正确地注释,并且在Netbeans/Glassfish4 4中工作良好,但是应用程序必须部署在Jetty服务器上。

所以,我的问题-如何将websocket端点映射到web.xml文件中的URL web.xml?我已经找到了许多映射servlet的示例,但我认为这不适用于服务器端点。

或者,是否有方法为Jetty编写web.xml文件,以便自动发现所有带注释的类/方法(类似于上面的beans.xml)

EN

回答 1

Stack Overflow用户

发布于 2013-11-21 17:34:52

假设您已经使用JSR-356技术注释了game.WebSocketEndpoint .

示例:

代码语言:javascript
复制
package game;

import javax.websocket.server.ServerEndpoint

@ServerEndpoint("/game")
public class WebSocketEndpoint {

}

那你得做下面的事..。

  1. 使用Jetty 9.1+
  2. Enable the 'websocket' module (将--module=websocket添加到start.ini或命令行)

这将启用websocket服务器类+ websocket端点的注释扫描。

注意: JSR-356不是通过部署描述符(web.xml)映射的。

但是,您可以使用以下技术之一以编程方式映射您的端点:

  1. 创建一个通过javax.servlet.ServletContextListener手动添加端点的javax.websocket.server.ServerContainer (参见下面的方法)
  2. 创建一个通过javax.servlet.ServerContainerInitializer手动添加端点的javax.websocket.server.ServerContainer (参见下面的方法)
  3. 创建一个返回要添加的端点的javax.websocket.server.ServerAppliationConfig

注意:技术#2和#3都需要对注释进行类扫描(缓慢启动)。技术1是快速启动。

如何手动添加终结点

代码语言:javascript
复制
// Get a reference to the ServerContainer
javax.websocket.server.ServerContainer ServerContainer =
  (javax.websocket.server.ServerContainer)
  servletContext.getAttribute("javax.websocket.server.ServerContainer");
// Add endpoint manually to server container
serverContainer.addEndpoint(game.WebSocketEndpoint.class);
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20127800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档