如何将参数传递给Websocket端点处理程序

如何将参数传递给Websocket端点处理程序,websocket,jetty,Websocket,Jetty,创建jetty websocket时,我注册端点处理程序,如下所示: public class MyWebSocketEndpoint extends WebSocketServlet { @Override public void configure(WebSocketServletFactory webSocketServletFactory) { webSocketServletFactory.register(MyEndpointHandler.clas

创建jetty websocket时,我注册端点处理程序,如下所示:

public class MyWebSocketEndpoint extends WebSocketServlet {

    @Override
    public void configure(WebSocketServletFactory webSocketServletFactory) {
        webSocketServletFactory.register(MyEndpointHandler.class);
    }
}

对于MyEndpoingHandler类,我不能用一些参数定义构造函数,否则它将出现运行时异常。创建MyEndpointHandler实例时如何传递一些参数?

使用
WebSocketCreator

调用
WebSocketServletFactory.register(MyEndpoingHandler.class)
内部发生的所有事情都相当于

@覆盖
公共无效寄存器(websocketPojo类)
{
this.setCreator(新的SingleEndpointCreator(websocketPojo));
}
WebSocketCreator
上的完整示例:

packagewebsocket;
导入java.io.IOException;
导入java.util.concurrent.AtomicInteger;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.server.handler.DefaultHandler;
导入org.eclipse.jetty.server.handler.HandlerList;
导入org.eclipse.jetty.servlet.DefaultServlet;
导入org.eclipse.jetty.servlet.ServletContextHandler;
导入org.eclipse.jetty.websocket.api.Session;
导入org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
导入org.eclipse.jetty.websocket.api.annotations.websocket;
导入org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
导入org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
导入org.eclipse.jetty.websocket.servlet.WebSocketCreator;
导入org.eclipse.jetty.websocket.servlet.WebSocketServlet;
导入org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
公共类DemoWebSocketCreator
{
公共静态类MyWebSocketServlet扩展了WebSocketServlet
{
@凌驾
公共void配置(WebSocketServletFactory wsFactory)
{
setCreator(新的MyWebSocketCreator());
}
}
公共静态类MyWebSocketCreator实现WebSocketCreator
{
私有AtomicInteger idGen=新的AtomicInteger(0);
@凌驾
公共对象createWebSocket(ServletUpgradeRequest ServletUpgradeRequest,ServletUpgradeResponse ServletUpgradeResponse)
{
String id=“ws”+idGen.incrementAndGet();
返回新的MyWebSocket(id);
}
}
@网袋
公共静态类MyWebSocket
{
私有最终字符串id;
公共MyWebSocket(字符串id)
{
this.id=id;
}
@OnWebSocketMessage
公共void onMessage(会话,字符串msg)
{
尝试
{
session.getRemote().sendString(“你好,我的id是[“+id+”]:你说:“+msg”);
}
捕获(IOE异常)
{
e、 printStackTrace();
}
}
}
公共静态void main(字符串[]args)引发异常
{
服务器=新服务器(8080);
ServletContextHandler上下文=新的ServletContextHandler();
context.setContextPath(“/”);
addServlet(MyWebSocketServlet.class,“/ws/”;
//始终是最后一个,并且在默认路径规范上
addServlet(DefaultServlet.class,“”);
HandlerList handlers=new HandlerList();
addHandler(上下文);
addHandler(新的DefaultHandler());
setHandler(处理程序);
server.start();
join();
}
}

使用
WebSocketCreator

调用
WebSocketServletFactory.register(MyEndpoingHandler.class)
内部发生的所有事情都相当于

@覆盖
公共无效寄存器(websocketPojo类)
{
this.setCreator(新的SingleEndpointCreator(websocketPojo));
}
WebSocketCreator
上的完整示例:

packagewebsocket;
导入java.io.IOException;
导入java.util.concurrent.AtomicInteger;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.server.handler.DefaultHandler;
导入org.eclipse.jetty.server.handler.HandlerList;
导入org.eclipse.jetty.servlet.DefaultServlet;
导入org.eclipse.jetty.servlet.ServletContextHandler;
导入org.eclipse.jetty.websocket.api.Session;
导入org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
导入org.eclipse.jetty.websocket.api.annotations.websocket;
导入org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
导入org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
导入org.eclipse.jetty.websocket.servlet.WebSocketCreator;
导入org.eclipse.jetty.websocket.servlet.WebSocketServlet;
导入org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
公共类DemoWebSocketCreator
{
公共静态类MyWebSocketServlet扩展了WebSocketServlet
{
@凌驾
公共void配置(WebSocketServletFactory wsFactory)
{
setCreator(新的MyWebSocketCreator());
}
}
公共静态类MyWebSocketCreator实现WebSocketCreator
{
私有AtomicInteger idGen=新的AtomicInteger(0);
@凌驾
公共对象createWebSocket(ServletUpgradeRequest ServletUpgradeRequest,ServletUpgradeResponse ServletUpgradeResponse)
{
String id=“ws”+idGen.incrementAndGet();
返回新的MyWebSocket(id);
}
}
@网袋
公共静态类MyWebSocket
{
私有最终字符串id;
公共MyWebSocket(字符串id)
{
this.id=id;
}
@OnWebSocketMessage
公共void onMessage(会话,字符串msg)
{
尝试
{
session.getRemote().sendString(“你好,我的id是[“+id+”]:你说:“+msg”);
}
捕获(IOE异常)
{
e、 printStackTrace();
}
}
}
公共静态void main(字符串[]args)引发异常
{
服务器=新服务器(8080);
ServletContextHand