在运行时映射websockets端点

时间:2015-10-16 21:27:05

标签: java java-ee websocket

我知道我们可以在servlet api 3.0之后在运行时映射一个servlet,可以通过以下方式实现:

@Override
public void contextInitialized( ServletContextEvent sce ) {
    ServletContext sc = sce.getServletContext();

    String servletMapping = "/yourURL";
    ServletRegistration sr = sc.addServlet( servletMapping, "org.yourdomain.yourclass" );
    sr.setInitParameter( "key", "value" );
    sr.addMapping( servletMapping );
}

使用websockets(使用javax.websockets.api)是否有类似的方法?

1 个答案:

答案 0 :(得分:0)

相当于ServletContainerInitializer的Websocket是ServerApplicationConfig。它只需要一个服务文件,Websocket API将主动扫描WAR中的WAR和JAR,以用于任何实现ServerApplicationConfig接口的类并使用它们。您可以在getEndpointConfigs()中使用ServerEndpointConfig.Builder以编程方式构建Websocket端点并将其返回。

这是一个启动示例,假设YourEndpoint.class代表您想以编程方式添加的Websocket端点,并且您想忽略任何已扫描的类。

public class YourServerApplicationConfig implements ServerApplicationConfig {

    @Override
    public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> scannedClasses) {
        Set<ServerEndpointConfig> configs = new HashSet<>();
        configs.add(ServerEndpointConfig.Builder.create(YourEndpoint.class, "/yourPath").build());
        return configs;
    }

    @Override
    public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scannedClasses) {
        return Collections.emptySet();
    }

}