尝试使用 Java 11、OpenJSK、Apache Tomcat/8.5.41 配置 Websocket 端点
Posted
技术标签:
【中文标题】尝试使用 Java 11、OpenJSK、Apache Tomcat/8.5.41 配置 Websocket 端点【英文标题】:Trying configure Websocket endpoint with Java 11, OpenJSK, Apache Tomcat/8.5.41 【发布时间】:2020-10-28 02:09:15 【问题描述】:我试图在我的 tomcat 服务器上配置 Websockets,但我无法设置端点。但我不断收到错误
error: cannot find symbol @ServerEndpoint("/websocketendpoint")
我安装了 javax.websocket api,但我仍然缺少 javax.websocket.server 包。我已经尝试安装我能找到的每个 java websocket 包,但仍然无法正常工作。
它应该是我的 tomcat 服务器、java 11 或 openJDK 的一部分,还是我只需要从网上的某个地方获取?直到现在我还没有找到这个包。当我使用 websocket-api.jar 编译时,所有其他注释都有效
import javax.naming.*;
import java.io.*;
import java.util.*;
import org.json.*;
import javax.naming.*;
import javax.websocket.*;
@ServerEndpoint("/websocketendpoint")
public class OffisEndpoint
private Session session;
@OnOpen
public void onOpen(Session session)
this.session = session;
@OnMessage
public void onMessage(String message)
try
if(this.session != null && this.session.isOpen())
this.session.getBasicRemote().sendText("From Server"+ message);
catch(Exception e)
@OnClose
public void onClose()
System.out.println("Close Connection ...");
@OnError
public void onError(Throwable e)
e.printStackTrace();
【问题讨论】:
你是怎么编译的?你会想要maven 或gradle 之类的东西来协助依赖管理。 我只是使用 javac -cp /path/to/websocket-api className.java 手动编译 【参考方案1】:只要您继续前进,您将无法在没有构建工具的情况下生活。对于这段代码,我使用maven 开始。 Maven 假定一个特定的目录结构,所以你的环境看起来像:
pom.xml
src/
main/
java/
com/
example/
websocket/
OffisEndpoint.java
OffisEndpoint.java
中的第一行现在将是 package com.example.websocket;
,表示该文件现在位于 Java 包中。
pom.xml
的内容是:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>websocket</artifactId>
<version>1.0.0</version>
<packaging>war</packaging>
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
您需要安装 Maven 才能使用它。有关详细信息,请参阅Install instructions。
安装 Maven 后,切换到 pom.xml
文件所在的目录并运行 mvn clean package
。这将下载一次需要的文件。下次构建它不会花费很长时间。
构建创建target/websocket-1.0.0.war
。这可以通过将其复制到 webapps
目录来部署到正在运行的 Tomcat。
您将通过http://localhost:8080/websocket/websocketendpoint
访问此 websocket 端点。额外的路径元素是因为您的代码部署了 websocket
Web 应用程序。
【讨论】:
在GitHub上查找示例项目以上是关于尝试使用 Java 11、OpenJSK、Apache Tomcat/8.5.41 配置 Websocket 端点的主要内容,如果未能解决你的问题,请参考以下文章
尽管使用了 AllPermission,但 Tomcat AccessControlException
使用 Java 在 Apache Spark 中从数据集中复制一行 n 次
FLinkcannot assign instance LinkedMap FlinkKafkaConsumerBase.pendingOffsetsToCommit